🦁
[Bug #21608] 三項演算子で break を使用すると Ruby 3.4.6 からシンタックスエラーになるバグ報告
[Bug #21608] 三項演算子と break を組み合わせると SyntaxError
- 次のように三項演算子で
breakを使用した場合に Ruby 3.4.6 からシンタックスエラーになるというバグ報告- Ruby 3.4.5 では問題ない
$ RBENV_VERSION=3.4.5 ruby -ve "p [1, 2].find {|i| i.even? ? break i : nil }"
ruby 3.4.5 (2025-07-16 revision 20cda200d3) +PRISM [x86_64-linux]
2
$ RBENV_VERSION=3.4.6 ruby -ve "p [1, 2].find {|i| i.even? ? break i : nil }"
ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux]
-e: -e:1: syntax error found (SyntaxError)
> 1 | ... i : nil }
| ^ unexpected local variable or method, expecting end-of-input
- これは
breakの優先順位の問題でもあり次のように()をつけると Ruby 3.4.6 でも問題なく動作するようになる
$ RBENV_VERSION=3.4.6 ruby -ve "p [1, 2].find {|i| i.even? ? (break i) : nil }"
ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux]
2
- この変更は [Bug #21540] prism allows
foo && return barwhen parse.y doesn't の影響みたいですね
Discussion