2011-06-11 27 views

回答

15

Object#send

>> a = "class" 
>> "foo".send(a) 
=> String 

>> a = "reverse" 
>> "foo".send(a) 
=> "oof" 

>> a = "something" 
>> "foo".send(a) 
NoMethodError: undefined method `something' for "foo":String 
+2

你也可以添加參數發送:''foo「.send(」<<「,」bar「)''。 – 2011-06-11 18:44:27

+0

@LBg哇,謝謝你讓我認識這個人! – mko 2011-06-13 15:14:11

+0

感謝您的快速回答,文檔鏈接,我正在徘徊您如何把這個鏈接放在那裏,有沒有捷徑去做這些事情? – mko 2011-06-13 15:15:39

1

如果你想要做一個鏈條,也可以使用對象#EVAL

>> a = "foo" 
=> "foo" 
>> eval "a.reverse.upcase" 
=> "OOF" 
+0

我不認爲鏈是相關的。標題具有誤導性。我改變了它。 – sawa 2011-06-11 18:15:26

+1

@sawa感謝您糾正我的問題 – mko 2011-06-13 15:02:29

0

如果你有一個包含Ruby代碼片段的字符串,你可以使用eval。我在這裏登陸時正在尋找那個答案的問題。在完成之後(感謝ProgrammingRuby),我發佈這個以防其他人來這裏尋找我正在尋找的東西。

考慮一下我有一行代碼的場景。這就是:

NAMESPACE::method(args) 

現在考慮的場景是在一個字符串變量

myvar = "NAMESPACE::method(args)" 

使用send(myvar)不執行命令。你可以這樣做:

eval(myvar) 
相關問題