たけ(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