👏

[Bug #20764] 特定の lambda 構文の場合だと意図せず転送引数がエラーにならないバグ報告

2024/10/07に公開

[Bug #20764] Forwarding parameter ... is wrongly allowed in lambda

  • ブロックの引数では本来 (...) 引数は受け取ることができないので以下のような lambda 構文のコードはエラーになります
-> (...) {}
__END__
output
test.rb: --> test.rb
unexpected `...` when the parent method is not forwarding
> 1  -> (...) {}
test.rb:1: syntax error, unexpected ..., expecting ')' (SyntaxError)
-> (...) {}
    ^~~
  • なので以下のような lambda 構文はすべてエラーになります
-> ... {}
-> (...) {}
-> (a, ...) {}
  • これは proc でも同様です
proc { |...| }
__END__
output:
test.rb: --> test.rb
unexpected `...` when the parent method is not forwarding
> 1  proc { |...| }
test.rb:1: syntax error, unexpected (..., expecting '|' (SyntaxError)
proc { |...| }
        ^~~
  • なんですが以下のような lambda 構文だとシンタックスエラーにならないバグ報告
# OK: 位置引数 + カッコがない場合
-> a = 0, ... {}
# OK: 位置引数のデフォルト引数がある場合
-> (a = 0, ...) {}

# こっちは NG
proc { |a = 1, ...| }
  • このバグは開発版の Ruby 3.4 ですでに修正済みです
GitHubで編集を提案

Discussion