📝
[Bug #21132] rescue と後置 if の挙動が Ruby 3.4 から変わったというバグ報告
[Bug #21132] Changed postposition rescue
and if
behavior since Ruby 3.4
- 次のコードで Ruby 3.3 と Ruby 3.4 で差異があるというバグ報告
def foo
return "hogehoge" rescue nil if false
return "fugafuga"
end
p foo
# Ruby 3.3 => "fugafuga"
# Ruby 3.4 => "hogehoge"
- Ruby 3.3 では
if false
のほうが優先して呼ばれていますが Ruby 3.4 ではreturn "hogehoge"
が優先して呼ばれているみたいですね - これは Ruby のバージョンの差異というよりかは
prism
の問題みたいです - 同じ Ruby 3.4 でも
parse.y
の場合は Ruby 3.3 と同じ挙動になります
def foo
return "hogehoge" rescue nil if false
return "fugafuga"
end
p foo
# prism => "hogehoge"
# parse.y => "fugafuga"
- 似たような不具合で [Bug #21048] [Prism] rescue in modifier form with condition behaves differently があったんですが、このチケットの問題も開発版の Ruby 3.5-dev では修正されているみたいですね
- 関連
Discussion