我想了解ruby如何處理yield和return語句,並且注意到有時,具有return語句的塊的yield是非法的,但有時可行。我有以下的例子,我在掙扎:帶有返回語句的塊的Ruby收益不一致
def foo
yield
end
def bar
foo do
return 'asdf'
end
end
現在,在上述情況下,我知道下面會失敗:
foo do
return 'asdf'
end
> LocalJumpError: unexpected return
但下面的工作(儘管它會返回無,而不是'asdf'):
bar
=> nil
我的問題是爲什麼看起來類似的代碼片段反應如此不同?是否因爲返回塊需要一個方法上下文來運行?一個更微妙的情況下
def baz
yield
puts 'Hi'
end
def bif
baz do
return 'asdf'
end
end
bif
=> nil
的「看跌期權‘你好’後」的產量不會被運行在所有的,我不知道爲什麼。
搜索lambda表達式VS特效 – apneadiving
在你的'foo'例如,第一個做了'return'而不方法或函數裏面。第二個,'bar'裏面有一個有效的'return',因爲它在方法中。在'bif'的情況下,'return'在'puts'之前執行。所以'puts'永遠不會發生。就好像'baz'做了'return'然後'puts'。 – lurker