我可以评估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