为什么我不能在Ruby中将块传递给proc?
发布时间:2020-12-17 04:01:09 所属栏目:百科 来源:网络整理
导读:为什么我不能这样做: do_once = Proc.new { yield }do_once.call { puts 1 } irb抛出LocalJumpError:没有给出块(yield) 解决方法 yield适用于传递给包装方法上下文的块.在你的情况下,我认为它是irb依赖的任何方法(lib / ruby?? / 2.0.0 / irb / workspace.
为什么我不能这样做:
do_once = Proc.new { yield } do_once.call { puts 1 } irb抛出LocalJumpError:没有给出块(yield) 解决方法
yield适用于传递给包装方法上下文的块.在你的情况下,我认为它是irb依赖的任何方法(lib / ruby?? / 2.0.0 / irb / workspace.rb:86评估,如果调用者是任何东西).
如果你将它包装在一个函数中它将起作用,因为你改变了方法上下文: def do_stuff do_once = Proc.new { yield } do_once.call end do_stuff { puts 1 } 注意上面没有do_once.call的块:yield适用于传递给do_stuff的块,而不是传递给do_once的块. 或者,明确声明块以避免完全使用yield: do_once = Proc.new { |&block| block.call } do_once.call { puts 1 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |