用参数调用带有instance_eval的proc?
问题描述:
我知道这个工程:用参数调用带有instance_eval的proc?
proc = Proc.new do
puts self.hi + ' world'
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc
但是我想参数传递给PROC,所以我想这不工作:
proc = Proc.new do |greeting|
puts self.hi + greeting
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc, 'world' # does not work
Usa.new.instance_eval &proc('world') # does not work
谁能帮我做工作?
答
使用instance_exec
代替instance_eval
当你需要传递参数。
proc = Proc.new do |greeting|
puts self.hi + greeting
end
class Usa
def hi
"Hello, "
end
end
Usa.new.instance_exec 'world!', &proC# => "Hello, world!"
注意:这是Ruby 1.8.7的新功能,所以如果需要升级或者需要升级require 'backports'
。
+2
有什么'backports' *不能做*吗? :-) – 2010-05-03 16:00:59
+0
@Jörg:-)我希望没有......太糟糕了,有些东西遥不可及,比如'Method#source_location'或编码的东西。而'instance_exec'是宝石中最丑陋的黑客...... – 2010-05-03 16:11:25
你有一个错字。 'gsub!(“gretting”,“问候”)' – 2010-05-03 15:45:31
现在已经修复。对于那个很抱歉。谢谢马克。 – 2010-05-03 15:51:10