如何将字符串转换为方法调用?

时间:2011-06-11 17:04:19

标签: ruby

如何将字符串用作方法调用?

"Some Word".class   #=> String
a = "class"
"Some World".a      #=> undefined method 'a'
"Some World"."#{a}" #=>  syntax error, unexpected tSTRING_BEG

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:1)

如果你想做一个链,也可以使用Object#eval

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

答案 2 :(得分:0)

如果您的字符串包含一段ruby代码,则可以使用eval。当我降落在这里时,我正在寻找那个答案的问题。在开始工作之后(感谢 ProgrammingRuby ),我发布了这个,以防其他人来这里寻找我想要的东西。

考虑我有一行代码的情况。这是:

NAMESPACE::method(args)

现在考虑一下字符串变量

的情况
myvar = "NAMESPACE::method(args)"

使用send(myvar)不会执行该命令。这是你如何做到的:

eval(myvar)