Daf*_*ees 0 ruby delegation block proc-object
我正在遍历一个对象图,并希望传递一个块,该块将从一个方法运行在结构的每个节点上 - 让我们称之为访问.
在顶部,我将调用一个块,我想委托初始调用访问根对象以访问其他对象.我可以使用&last_parameter_name将块解压缩到本地proc中 - 但是如何在我委托的调用中将proc转回块?
这是一个简化的例子,我先调用(...)并希望将块委托给我的第二个调用(...)
def second(&block) # ... ? ...
block.call(72)
end
def first(&block)
puts block.class # okay - now I have the Proc version
puts 'pre-doit'
block.call(42)
puts 'post-doit'
second( ... ? ...) # how do I pass the block through here?
end
first {|x| puts x*x}
Run Code Online (Sandbox Code Playgroud)
注意:我需要在first()和second()上使用相同的约定 - 即它们需要采用相同的东西.
阅读并尝试了答案后,我想出了一个更全面,更有效的例子:
class X
def visit(&x)
x.call(50)
end
end
class Y < X
def visit(&x)
x.call(100)
X.new.visit(&x)
end
end
Y.new.visit {|x| puts x*x}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,那么就像
second &block
Run Code Online (Sandbox Code Playgroud)