我想一个变量传递给像一个动态声明的方法:我可以将变量传递给eval吗?
eval(def test(name)
puts name
end
test 'joe')
,但它不工作。
有没有办法做到这一点?
我想一个变量传递给像一个动态声明的方法:我可以将变量传递给eval吗?
eval(def test(name)
puts name
end
test 'joe')
,但它不工作。
有没有办法做到这一点?
eval
需要一个字符串。以下应该工作正常:
eval "def test(name)
puts name
end
test 'joe'"
感谢提醒布赖恩。有用。 不知道为什么我错过了。 – Nick 2010-06-08 16:39:08
我对你想要做什么有点困惑。如果你正在试图确定与EVAL的方法,可以采取这里的参数是例如:
eval "def test(name)
puts name
end"
test 'joe'
如果你想使用eval定义为更具活力和使用变量的方法,因为正如布赖恩指出出EVAL需要一个字符串,你会做这样的事情:
test_name = 'joe'
eval "def test
puts '#{test_name}'
end"
test
如果要动态申报的方法,然后更好的方式来做到这一点是使用define_method
代替的eval,像这样
define_method(:test) do |name|
name
end
test 'joe'
#=> joe
除非绝对必要,否则不要使用eval,并且您有120%确定它是安全的。即使你120%确定它是安全的,仍然尝试寻找其他选项,如果你找到一个,然后使用它,而不是eval。
我真的很困惑你想做什么。 'eval'不是这份工作的工具。 'define_method'如何? – Matchu 2010-06-08 04:12:27