[Bug #21184] パターンマッチでロケット演算子の Hash パターンを仕様すろtシンタックスエラーになるバグ報告

に公開

[Bug #21184] SyntaxError when combining in with inline hash-rocket (=>)

  • 以下のようにロケット演算子の Hash パターンと in を組み合わせると意図せずシンタックスエラーになるというバグ報告
# 以下の構文は OK
{ a: 1 } in { a: 1 } # => true
{ a: 1 } in { a: Integer } # => true
pattern = { "a" => 1 }; { "a" => 1 } in pattern # => true

# これは NG
{ "a" => 1 } in { "a" => 1 } # => SYNTAX ERROR
  • これなんですが期待する挙動で in 句の右辺にはロケット演算子の Hash リテラルを書くことはできません
    • 厳密にいうと Hash パターンではロケット演算子は記述できない
  • なので以下のように記述できても
# OK
{ a: 1 } in { a: b }
  • Hash リテラルのように以下のようには記述できない
# NG
{ :a => 1 } in { :a => b }
  • 右辺は厳密にいうと Hash リテラルではなくてパターンマッチの Hash パターンの記法になるからですかねー
GitHubで編集を提案

Discussion