🦁

[Bug #20931] パターンマッチの in 式でカッコをつける必要があるチケット

2024/11/21に公開

[Bug #20931] Using in as an expression requires extra parentheses

  • パターンマッチの in 式を使用する時にカッコで囲む必要がるというバグ報告
  • 例えば次のコードはシンタックスエラーになります
t = { a: 1, b:1 }
puts(t in {a: 1, c: 1}) # syntax error
  • これを回避する場合は以下のようにカッコで囲む必要があります
t = { a: 1, b:1 }
puts((t in {a: 1, c: 1})) # => false
  • また次のような代入式は in 式の結果が代入されるわけではないです
t = { a: 1, b:1 }

r = t in {a: 1, c:1 }
pp r # => {a: 1, b: 1}
  • メソッド呼び出しの場合は puts(a in 1, 2, 3)puts((a in 1), 2, 3) なのか puts((a in 1, 2), 3) なのか puts((a in 1, 2, 3)) なのかが曖昧なのでカッコをつける必要がある感じですね
  • 後者は in 式の優先順位が低いことに起因している感じですかね?
  • andor とかと同じような感じで捉えるとよさそうではありますかねー
GitHubで編集を提案

Discussion