👻
[Bug #21378] 1行メソッド定義でパターンマッチで引数を ^ で参照したときにエラーになるというバグ報告
[Bug #21378] variable pinning does not look for method arguments
- 次のように1行メソッド定義でパターンマッチで引数を
^で参照したときにエラーになるというバグ報告
irb(main):001> def x?(y, z) = y in { x: ^z }
<internal:kernel>:168:in 'Kernel#loop': (irb):1: syntax error found (SyntaxError)
> 1 | def x?(y, z) = y in { x: ^z }
| ^ z: no such local variable
from eval_async:132:in '<main>'
from /bundle/gems/js-2.7.1/lib/js.rb:109:in 'Kernel.eval'
from /bundle/gems/js-2.7.1/lib/js.rb:109:in 'block in JS.__eval_async_rb'
from /bundle/gems/js-2.7.1/lib/js.rb:120:in 'block in JS.__async'
- これなんですが
def x?(y, z) = y in { x: ^z }が(def x?(y, z) = y) in { x: ^z }のように解釈される(つまり^zはメソッド定義の外の値を参照する)のでエラーになるみたい - なので次のコードではエラーにならない(が、意図する挙動にはならない)
z = 42
def x?(y, z) = y in { x: ^z }
- これは
parse.yでも同様みたいですね
Discussion