本文目錄一覽:
- 1、如何在 js 文件里加入 rails 變數 · Ruby China
- 2、ruby main.rb怎麼調用
- 3、如何用ruby調用另一個ruby腳本?
- 4、AngularJS 怎麼用 jQuery · Ruby China
- 5、如何運行一個ruby類 中的方法
如何在 js 文件里加入 rails 變數 · Ruby China
不行的,app/assets/javascript文件夾裡面放的應該是.js文件
你要想這麼做,你可以把那個rails的變數放在頁面中的一個隱藏域中
例如:
input type=”hidden” id=”user_name” value=”%= @user.name %”/
在js中就能取到這個@user.name的值
jquery 代碼如下
var user_name = $(“#user_name”).val();
開發應該有一個思想,js代碼歸js代碼,html歸html,ruby代碼歸ruby代碼
這樣看起來很舒服
ruby main.rb怎麼調用
在ruby編程中,()可以省略不要,要顯示連續的多個字元串時,可以用逗號隔開,例如print(“playcame”,”\'”,”afk”),這樣的語句在Ruby中也是合法的,另外,print語句還可以分行寫,效果與前兩種的調用方法是一樣的。
Ruby編程的三種調用方法
工具/原料
Ruby
步驟/方法
打開記事本或者文本編輯器,輸入,print “hello\nmy ruby\nmm\n”
Ruby編程的三種調用方法
點擊文件,另存為文件夾,保存在C盤下,路徑隨便,格式改為rb。
點擊開始,運行,命令提示符,輸入cd C:\Documents and Settings\Administrator\桌面\ruby(這個只是我保存的文件夾),按回車鍵
Ruby編程的三種調用方法
輸入ruby 1.rb,按回車鍵
Ruby編程的三種調用方法
可以看到,結果分為三行輸出,現在我們用第二種調用方法,再次打開記事本,輸入print(“hello”,”\n”,”my ruby”,”\n”,”mm”,”\n”)
Ruby編程的三種調用方法
結果顯示,這種調用方法也和前一種的效果一樣,現在,我們用另一種方法。再次打開記事本,輸入
print(“hello\n”)
print(“my ruby\n”)
print(“mm\n”)
Ruby編程的三種調用方法
將文件保存到文件夾里,格式改為rb,這裡我改為3.rb。
再次打開命令提示符,輸入ruby 3.rb,按回車鍵
Ruby編程的三種調用方法
這次可以很明顯的看到了,三次的輸出結果都是一模一樣的,但是卻用了三種不同的調用方法,也就是,這三種調用方法都是有效的且合法的。
如何用ruby調用另一個ruby腳本?
system(「.ruby」)或者load ‘another.rb’
具體代碼如下:
# 返回ls的輸出
s=`ls`
cmd= “ls”
s= `#{cmd}`
# 返回true or false
s= system(‘ls’)
cmd= ‘ls’
s= system(cmd)
#返回輸出
s= %x[uptime]
#用top進程替換當前ruby進程
exec “top”
cmd = ‘top’
exec cmd
AngularJS 怎麼用 jQuery · Ruby China
參考下面使用方法:
when(‘/’, templateUrl: ‘/assets/docatapp/templates/docs_view.html’, controller: @DocsViewController, resolve: @DocsViewController.resolve)
@DocsViewController.resolve =
redirect: ($route, $location) –
@path = $route.current.params.path
$location.url @path if @path?
data: ($q, $doCat, $route, $shared) –
deferred = $q.defer()
unless @path?
params = $route.current.params
page = if params.page then params.page else 1
per = $shared.per()
$doCat.doc.query {page: page, per: per}, (data) –
deferred.resolve(data)
deferred.promise
@DocsViewController = ($scope, $location, $routeParams, $shared, data) –
如何運行一個ruby類 中的方法
在Ruby中,有多種方法可以實現方法的動態調用。
1.
使用send方法
第一種實現動態方法調用是使用send方法,send方法在Object類中定義,方法的第一個參數是一個符號用來表示所要調用的方法,後面則是所調用方法需要的參數。
「This
is
a
dog1″.send(:length)
=
14
上面的代碼中通過send方法去對一個字元串執行length操作,返回字元串的長度。
class
TestClass
def
hello(*args)
」Hello
」
+
args.join(『
『)
end
end
a
=
TestClass.new
puts
a.send
:hello,
「This」,
「is」,
「a」,
「dog!」
執行結果為:
Hello
This
is
a
dog!
2.
使用Method類和UnboundMethod類
另一種實現動態方法調用是使用Object類的method方法,這個方法返回一個Method類的對象。我們可以使用call方法來執行方法調用。
test1
=
「This
is
a
dog1″.method(:length)
test1.call
=
14
class
Test
def
initialize(var)
@var
=
var
end
def
hello()
」Hello,
@var
=
#{@var}」
end
end
k
=
Test.new(10)
m
=
k.method(:hello)
m.call
#=
「Hello,
@iv
=
99″
l
=
Test.new(『Grant』)
m
=
l.method(「hello」)
m.call
#=
「Hello,
@iv
=
Fred」
可以在使用對象的任何地方使用method對象,當調用call方法時,參數所指明的方法會被執行,這種行為有些像C語言中的函數指針。你也可以把method對象作為一個迭代器使用。
def
square(a)
a*a
end
mObj
=
method(:square)
[1,
2,
3,
4].collect(mObj)
=
[1
4
9
16]
Method對象都是和某一特定對象綁定的,也就是說你需要通過某一對象使用Method對象。你也可以通過UnboundMethod類創建對象,然後再把它綁定到某個具體的對象中。如果UnboundMethod對象調用時尚未綁定,則會引發異常。
class
Double
def
get_value
2
*
@side
end
def
initialize(side)
@side
=
side
end
end
a
=
Double.instance_method(:get_value)
#返回一個UnboundMethod對象
s
=
Double.new(50)
b
=
a.bind(s)
puts
b.call
執行結果為:
100
看下面一個更具體的例子:
class
CommandInterpreter
def
do_2()
「This
is
2
」;
end
def
do_1()
「This
is
1
」;
end
def
do_4()
「This
is
4
」;
end
def
do_3()
「This
is
3
」;
end
Dispatcher
=
{
?2
=
instance_method(:do_2),
?1
=
instance_method(:do_1),
?4
=
instance_method(:do_4),
?3
=
instance_method(:do_3)
}
def
interpret(string)
string.each_byte
{|i|
Dispatcher[i].bind(self).call
}
end
end
interpreter
=
CommandInterpreter.new
interpreter.interpret(』1234′)
執行結果為:
This
is
1
This
is
2
This
is
3
This
is
4
3.
使用eval方法
我們還可以使用eval方法實現方法動態調用。eval方法在Kernel模塊中定義,有多種變體如class_eval,module_eval,instance_eval等。Eval方法將分析其後的字元串參數並把這個字元串參數作為Ruby代碼執行。
str
=
「Hello」
eval
「str
+
『
World!』」
=
Hello
World!
sentence
=
%q{「This
is
a
test!」.length}
eval
sentence
=
15
當我們在使用eval方法時,我們可以通過eval方法的第二個參數指明eval所運行代碼的上下文環境,這個參數可以是Binding類對象或Proc類對象。Binding類封裝了代碼在某一環境運行的上下文,可以供以後使用。
class
BindingTest
def
initialize(n)
@value
=
n
end
def
getBinding
return
binding()
#使用Kernel#binding方法返回一個Binding對象
end
end
obj1
=
BindingTest.new(10)
binding1
=
obj1.getBinding
obj2
=
BindingTest.new(「Binding
Test」)
binding2
=
obj2.getBinding
puts
eval(「@value」,
binding1)
#=
10
puts
eval(「@value」,
binding2)
#=
Binding
Test
puts
eval(「@value」)
#=
nil
可以看到上述代碼中,@value在binding1所指明的上下文環境中值為10,在binding2所指明的上下文環境中值為Binding
Test。當eval方法不提供binding參數時,在當前上下文環境中@value並未定義,值為nil。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185566.html