たけ(tk)です。

[ruby-list:45336] Re: def meth(*args, &block) の「*」「&」の呼び名は? 
にて 
rubikitch / ruby-lang.org さん 曰く:
> > 最後の仮引数の直前に * がある場合には残りの実引数はみな配列とし てこの引数に格納されます。 可変長引数などと呼ばれる機能です。
> > 最後の仮引数の直前に & があるとこのメソッドに与えられているブロッ クが手続きオブジェクト(Proc)としてこの引数に格納されます。
> > 
> > ということなのですが、この「*」や「&」の呼び名は何でしょうか?
> 
> そういえば書いてありませんね。
> 僕は「可変長引数」と「&引数」と呼んでいます。
> 「ブロック引数」だと |〜| のことと誤解しがちなので。

「可変長引数の*」とか「*引数の*」、「&引数の&」という名前になるのかな?

「ブロック引数」も悩ましいですね。リファレンスの作者も悩んでいるみたいだ。

http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.a4.a5.c6.a5.ec.a1.bc.a5.bf
「yield に渡された値はブロック記法において | と | の間にはさまれた 
変数(ブロックの引数)に代入されます。」

> > 「配列展開演算子」、とか「splat演算子」、「ブロック展開演算子」とか、勝
> 
> 少なくとも演算子と呼ぶのはおかしいと思います。
> 「splat演算子」はこっちのほうでしょう。
> 
> a = [2,3]
> x = 1, *a
> x         # => [1, 2, 3]

「splat演算子」という名称はありなんですね。

これ(↓)の受ける方の「*y」の「*」も「splat演算子」じゃないのかな?

a = [2,3]
x,*y = 0, 1, *a
p [x,y]   #=> [0, [1, 2, 3]]
x,*y = 0,1,2,3
p [x,y]   #=> [0, [1, 2, 3]]

* 受ける方が「演算子」ってことは、ないか?

* 演算子の一覧には、単項の「*」や「&」は入っていない・・。

http://www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html#a.c2.bf.bd.c5.c2.e5.c6.fe

* 代入の「=」も演算子に入っているくらいだから、受ける方の「splat演算子」
もありか?

* まつもとさんは、なんて呼んでいるのだろうか?

* 実引数で(たぶん代入の右辺でも)「splat演算子」と言っているらしいこ
とは発見した。では、仮引き数や代入の左辺はいかに?

http://www.rubyist.net/~matz/20060531.html
「実引数リストに複数のsplat演算子を置く修正を実装。」

−−−−

関係ないけど・・

http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.a4.a5.c6.a5.ec.a1.bc.a5.bf
ブロック付きメソッド呼び出し
・・
文法:
method(arg1, arg2, ...)  do [`|' 式 ... `|'] 式 ... end
method(arg1, arg2, ...) `{' [`|' 式 ... `|'] 式 ... `}'
method(arg1, arg2, ..., `&' proc_object)
                ↓
method(arg1, arg2, ...)  do [`|' 変数 ... `|'] 式 ... end
method(arg1, arg2, ...) `{' [`|' 変数 ... `|'] 式 ... `}'
method(arg1, arg2, ..., `&' proc_object)

ではなかろうか・・。

take_tk = kumagai hidetake