📝

[Bug #21132] rescue と後置 if の挙動が Ruby 3.4 から変わったというバグ報告

2025/02/13に公開

[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"
GitHubで編集を提案

Discussion