3

我想将一个块传递给一个instance_eval像这样 -ed 的块,

instance_eval(&block) { puts "test" }

whereblock被定义为包含以下内容:

puts "Incoming message:"
yield

这可能吗?我发现了一种使用纤维的方法,但我正在尝试先使用yield。看着这个问题,看起来这可能是不可能的,但我想确认一下。

4

1 回答 1

4

确实很奇怪。为什么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
于 2013-01-05T03:06:32.997 回答