为什么我不能在Ruby中将块传递给proc?

为什么我不能这样做:

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 }

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...