我想将一个块传递给instance_eval
的块 - 就像这样,
instance_eval(&block) { puts "test" }
其中block
被定义为包含以下内容:
puts "Incoming message:"
yield
这可能吗?我发现了一种用纤维做这个的方法,但我首先尝试使用yield
。看this question,看起来这可能是不可能的,但我想确认一下。
答案 0 :(得分: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