2015-06-04 94 views
2

我想知道爲什麼我不能從該塊返回:LocalJumpError:意外的返回

[1,2].each { |e| return e } # => LocalJumpError: unexpected return 

而這些工作:

[1,2].each { |e| Proc.new {return e} } # => [1, 2] 
[1,2].each { |e| lambda {return e} } # => [1, 2] 

希望有人能解釋清楚。

+0

再次嘗試您的代碼,但這次調用proc和lambda(因爲塊也被調用)。你會看到proc也會升起。這是因爲塊和特效是相同的,但lambda表現得像方法一樣。請參閱http://www.reactive.io/tips/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/或SO答案,如https://stackoverflow.com/questions/1435743/why-does -explicit-return-make-a-difference-in-a-proc – cremno

+1

另請參閱http://stackoverflow.com/a/1402764/192702。沒有像'each'這樣的枚舉器,看起來有點奇怪,但是你可以使用'next'關鍵字來退出任何塊。 –

回答

2

您可以在Ruby中使用塊內返回。它將從封閉的方法返回。在這種情況下,沒有封閉方法,這就是爲什麼有錯誤,這不是因爲塊中的返回是非法的