加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我不能在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 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读