2011-11-24 58 views
1

我已经哪个参考的方法的变量,我调用该方法与EVAL关键字红宝石 - 传递变量eval方法

a_test = "myvariable" 
eval a_test 


def myvariable 
(...) 
end 

我想传递给方法的变量,如

def myvariable(var1) 
(...) 
end 

是否有人熟悉完成此任何“成语”的方式。做类似

eval a_test "string_test" 

自然会失败,因为查找将被解释为一个函数调用来完成“a_test”

+0

试试这个'EVAL “#{} a_test( 'string_test')”' –

+0

只是为了它的清洁:'myvariable'在这种情况下**不是**的变量。 –

回答

12

这应该为你工作

def myvariable(foo) 
    return "hello #{foo}" 
end 
a_test = "myvariable" 

eval "puts #{a_test}('world')" 

#=> hello world 

在红宝石尽管如此,这样做更合适

def myvariable(foo) 
    return "hello #{foo}" 
end 
a_test = "myvariable" 

puts send(a_test, 'world') 

#=> hello world 

了解更多关于send

+3

+1用于非评估解决方案。 –

+0

啊哈 - 非常感谢! – Robert