我可以评估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在其背景下没有阻碍。 虽然可以使用指定的参数调用procs,从而将参数传递给proc,但yield不能根据指定的参数工作; 它执行在proc的闭包中找到的块。 并且proc的闭包是预定义的; 它不会被修改只是因为你稍后用块调用它。

所以它只相当于直接输入’yield’直接进入irb (不在任何方法定义中),返回LocalJumpError: no block given (yield) error。

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

但是你当然可以为块命名,然后像调用任何其他可调用对象一样调用它:

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