我可以将变量传递给eval吗?

Nic*_*ick 4 ruby

我试图将变量传递给动态声明的方法,如:

eval(def test(name)
 puts name
end
test 'joe')
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有没有办法做到这一点?

Bri*_*nna 10

eval期待一个字符串.以下应该工作正常:

eval "def test(name)
  puts name
end
test 'joe'"
Run Code Online (Sandbox Code Playgroud)


nas*_*nas 7

如果你想动态声明一个方法,那么更好的方法是使用define_method而不是eval,就像这样

define_method(:test) do |name|
  name
end

test 'joe'
#=> joe
Run Code Online (Sandbox Code Playgroud)

除非绝对必要,否则不要使用eval,并且120%确定它是安全的.即使您确信它是安全的120%,仍然会尝试寻找其他选项,如果找到一个,那么使用它而不是eval.