我可以评估Proc中的块吗



我可以在Proc中生成一个块吗?考虑这个例子:

a = Proc.new do
  yield
end
a.call do
  puts "x"
end

我试图实现的是打印x,但用ruby 2.0解释它会引发LocalJumpError: no block given (yield)

不可以,因为您创建的Proc是一个独立的yield,也就是说,它是一个上下文中没有块的yield。尽管您可以用指定的参数调用proc,从而将参数传递到proc中,但yield不能基于指定的参数工作;它执行在proc的闭包中找到的块。并且proc的闭包是预定义的;它不会因为稍后用块调用而被修改。

因此,这相当于直接在irb中键入"yield"(不在任何方法定义中),返回LocalJumpError: no block given (yield)错误。

@Rebitzele解释了代码不起作用的原因:yield关键字是调用已传递给方法的匿名块的简写符号,在这种情况下,甚至不是方法。

但你当然可以给这个块起一个名字,然后像调用任何其他可调用对象一样调用它:

a = ->&block { block.() }
a.() do puts 'x' end
# x

相关内容

  • 没有找到相关文章

最新更新