爲什麼我不能做這樣的事情:爲什麼我不能將一個塊傳遞給Ruby中的proc?
do_once = Proc.new { yield } do_once.call { puts 1 }
IRB拋出LocalJumpError: no block given (yield)
爲什麼我不能做這樣的事情:爲什麼我不能將一個塊傳遞給Ruby中的proc?
do_once = Proc.new { yield } do_once.call { puts 1 }
IRB拋出LocalJumpError: no block given (yield)
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 }
你可以這樣做:
do_once = Proc.new { |&block| block.call }
do_once.call { puts 1 }