[英]Can I evaluate a block inside a 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.