簡體   English   中英

我可以評估Proc中的塊嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM