🌊

[Bug #20482] 1行パターンマッチで if を使ったときのバグ報告

2024/05/19に公開

[Bug #20482] nil variables in a guard clause of a standalone => or in expression

  • 次のようなパターンマッチのコードが意図しないエラーになるというバグ報告
[1, 2] in a, b if b == 2*a
x.rb:1:in `*': nil can't be coerced into Integer (TypeError)

[1, 2] in a, b if b == 2*a
                         ^
        from x.rb:1:in `<main>'
  • 意図としては以下のような case ~ in と同等の挙動を期待しています
case [1, 2]
in a, b if b == 2*a # キャプチャした変数を参照しつつ条件を指定できる
  true
else
  false
end
# => true
  • これはいわゆるパターンマッチの if ではなくて後置 if として解釈されるので左辺が評価される前に if 文の条件式が評価されるのでエラーになってしまう感じです
# こう解釈される
([1, 2] in a, b) if b == 2*a
GitHubで編集を提案

Discussion