在塊中返回與下一個非本地返回
考慮這個破碎的片段:
def foo
bar = [1, 2, 3, 4].map do |x|
return 0 if x.even?
x
end
puts 'baz'
bar
end
foo # => 0
人們可能期望 return
為 map
的塊結果陣列產生一個值。因此 foo
的返回值將是 [1, 0, 3, 0]
。相反, return
從方法 foo
返回一個值。請注意,baz
未列印,這意味著執行從未到達該行。
具有值的 next
可以解決問題。它充當了塊級 return
。
def foo
bar = [1, 2, 3, 4].map do |x|
next 0 if x.even?
x
end
puts 'baz'
bar
end
foo # baz
# => [1, 0, 3, 0]
在沒有 return
的情況下,塊返回的值是其最後一個表示式的值。