🙄
[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