🙄
[Bug #21048] 後置 if と rescue が混ざっている場合に prism と parse.y で結果が異なるというバグ報告
[Bug #21048] [Prism] rescue in modifier form with condition behaves differently
- 次のように後置
ifとrescueが混ざっている場合にprismとparse.yで結果が異なるというバグ報告
$called = false
def foo
$called = true
end
foo rescue nil if false
# prism は foo は呼び出されないが parse.y は foo が呼び出される
puts "Called: #{$called}"
# prism => Called: true
# parse.y => Called: false
- これは
prismがfoo rescue (nil if false)と解釈されてparse.yは(foo rescue nil) if falseと解釈されているからみたいですね-
式1 rescue 式2は式1を評価し、例外が発生すれば式2を評価するような処理になるのでprismの場合はfooが必ず評価されます
-
- これは開発版の Ruby 3.5 で
prismの場合でもfalseを返すように修正されました
$called = false
def foo
$called = true
end
foo rescue nil if false
# prism は foo は呼び出されないが parse.y は foo が呼び出される
puts "Called: #{$called}"
# Ruby 3.4 prism => Called: true
# Ruby 3.5 prism => Called: false
Discussion