我试图将变量传递给动态声明的方法,如:
eval(def test(name)
puts name
end
test 'joe')
但它不起作用。
有办法做到这一点吗?
答案 0 :(得分:10)
eval
需要一个字符串。以下应该可以正常工作:
eval "def test(name)
puts name
end
test 'joe'"
答案 1 :(得分:7)
如果你想动态声明一个方法,那么更好的方法是使用define_method
而不是eval,就像这样
define_method(:test) do |name|
name
end
test 'joe'
#=> joe
除非绝对必要,否则不要使用eval,并且120%确定它是安全的。即使你确定它是安全的120%,仍然会尝试寻找其他选项,如果你找到一个,那么使用它而不是eval。
答案 2 :(得分:0)
我对你要做的事感到有点困惑。如果您尝试使用eval定义一个方法,可以在此处获取参数,例如:
eval "def test(name)
puts name
end"
test 'joe'
如果你想使用eval定义一个更动态的方法并使用一个变量,因为正如Brian指出eval需要一个字符串,你会做这样的事情:
test_name = 'joe'
eval "def test
puts '#{test_name}'
end"
test