2013-06-27 28 views

回答

5

yield適用於傳遞給捆綁方式背景下的塊。在你的情況下,我認爲這是irb依靠(lib/ruby/2.0.0/irb/workspace.rb:86 evaluate,如果caller是任何事情要依靠)的方法。

如果你把它包裝它會工作的功能,因爲你改變了方法方面:

def do_stuff 
    do_once = Proc.new { yield } 
    do_once.call 
end 

do_stuff { puts 1 } 

注意沒有塊爲do_once.call在上面:yield適用於傳遞給do_stuff塊,而不是傳遞給do_once的塊。

另外,顯式聲明塊,以避免使用產乾脆:

do_once = Proc.new { |&block| block.call } 
do_once.call { puts 1 } 
4

你可以這樣做:

do_once = Proc.new { |&block| block.call } 
do_once.call { puts 1 } 
相關問題