我想将一个块传递给一个instance_eval
像这样 -ed 的块,
instance_eval(&block) { puts "test" }
whereblock
被定义为包含以下内容:
puts "Incoming message:"
yield
这可能吗?我发现了一种使用纤维的方法,但我正在尝试先使用yield
。看着这个问题,看起来这可能是不可能的,但我想确认一下。
确实很奇怪。为什么instance_eval
?它通常用于改变自我,并在接收者的上下文中进行评估。
cat = String.new('weird cat')
block1 = lambda do |obj, block|
puts "Incoming message for #{obj}:"
block.call
end
block2 = Proc.new { puts "test" }
block3 = lambda {|obj| block1.call(obj, block2)}
cat.instance_eval(&block3)
执行(Ruby 1.9.2):
$ ruby -w t2.rb
Incoming message for weird cat:
test