以下代码可以正常使用:
person = {:a=>:A, :b=>:B, :c=>:C}
berson = {:a=>:A1, :b=>:B1, :c=>:C1}
kerson = person.merge(berson) do | key, oldv, newv |
if key == :a
oldv
elsif key == :b
newv
else
key
end
end
puts kerson.inspect
但如果我在“if block”中添加return
,我会收到错误:
person = {:a=>:A, :b=>:B, :c=>:C}
berson = {:a=>:A1, :b=>:B1, :c=>:C1}
kerson = person.merge(berson) do | key, oldv, newv |
if key == :a
return oldv
elsif key == :b
return newv
else
return key
end
end
puts kerson.inspect
以上代码的错误是:
unexpected return (LocalJumpError)
任何人都能解释一下吗?我认为return
可以选择在任何已经假设返回值的地方使用。
答案 0 :(得分:12)
错误的原因是块实际上没有自己返回的范围 - 从块返回等同于从周围方法返回。这里的周围方法是什么?没有 - 它位于顶层,所以它等同于执行ruby -e "return"
,它会给你同样的错误。如果你把它放在一个方法中,它将使该方法返回被执行的if子句的第一个分支的值。