2013-03-18 75 views

回答

4

因为这就是红宝石的工作原理。任何方法都可以通过一个块。如果需要,该方法的责任是检查block_given?yield

这是隐式块传递。当你声明一个块参数时,会发生一些不同的情况:块被转换为一个Proc对象,以便它可以像函数一样调用并作为参数传递。你不能用隐式块(AFAIK)来做到这一点。

def foo &block 
    block.call 3 
    bar block 
end 

# this method expects proc as a regular parameter (not a block), so you can pass 
# a block in addition to it (if you so desire) 
def bar block 
    block.call 4 
end 

foo do |x| 
    puts "this is #{x}" 
end 
# >> this is 3 
# >> this is 4 
+0

“因为这就是红宝石的工作原理。”是的,那*就是我会用过的那个短语。不需要任何其他答案(或者对于其他答案)。 – matt 2013-03-18 04:03:25

+0

@马特:不休息,答案是太短了一个答案:) – 2013-03-18 05:18:19

+0

@SergioTulentsev是什么'高清富&block'和'高清酒吧block'之间的区别? – 2013-03-18 06:10:22

相关问题