From: "shugo (Shugo Maeda)" Date: 2022-11-17T08:52:16+00:00 Subject: [ruby-dev:51201] [Ruby master Bug#19132] `**` を引数に指定すると no anonymous keyword rest parameter になる Issue #19132 has been updated by shugo (Shugo Maeda). shugo (Shugo Maeda) wrote in #note-5: > nobu (Nobuyoshi Nakada) wrote in #note-4: > > `:**`に統一でいいのではないでしょうか。 > > Rubyレベルで公開されている情報が `:**` なので私もそちらに合わせる方がよいように思います。 上記の修正でRBSのテストがこけるのを調べてみたのですが、RubyVM::ASTのテストが通るように以下の修正をしたせいでした。 ``` --- a/ast.c +++ b/ast.c @@ -348,6 +348,7 @@ static VALUE var_name(ID id) { if (!id) return Qnil; + if (!rb_is_local_id(id)) return Qnil; if (!rb_id2str(id)) return Qnil; return ID2SYM(id); } ``` 変数名が `**` の時に名前なし扱いするためでしたが、これが `def foo(...)` とかで定義される `*` なども隠してしまっていたようです。 `**` の時だけ隠すという修正もできますが、UnboundMethod#parametersなどでは `**` という変数名が見えているので、RubyVM::ASTも合わせた方がいいように思います。 ---------------------------------------- Bug #19132: `**` を引数に指定すると no anonymous keyword rest parameter になる https://bugs.ruby-lang.org/issues/19132#change-100148 * Author: tommy (Masahiro Tomita) * Status: Open * Priority: Normal * ruby -v: ruby 3.2.0preview3 (2022-11-14) [arm64-darwin21] * Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONTNEED ---------------------------------------- Ruby 3.2.0-preview3 で次のスクリプトを実行するとエラーになります。 ```ruby def hoge(a, *, k: nil, **) foo(*, **) end ``` ``` % ruby hoge.rb hoge.rb:2: no anonymous keyword rest parameter ``` 次のようにキーワードパラメータが `**` だけであればエラーになりませんでした。 ```ruby def hoge(a, *, **) foo(*, **) end ``` -- https://bugs.ruby-lang.org/