以下代码工作正常:
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
Run Code Online (Sandbox Code Playgroud)
但是如果我return在"if block"里面添加,我会收到一个错误:
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
Run Code Online (Sandbox Code Playgroud)
上面代码的错误是:
unexpected return (LocalJumpError)
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?我认为return可以选择在任何已经假设返回值的地方使用.
Chu*_*uck 12
出错的原因是块实际上没有自己返回的范围 - 从块返回等同于从周围方法返回.这里的周围方法是什么?没有 - 它在顶级,所以它相当于做ruby -e "return",这会给你同样的错误.如果你把它放在一个方法中,它将使该方法返回被执行的if子句的第一个分支的值.
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |