2008年8月11日

[ruby-list:45337] Re: def meth(*args, &block)の「*」「&」の呼び名は?

たけ(tk)です。

[ruby-list:45336] Re: def meth(*args, &block) の「*」「&」の呼び名は?
にて
rubikitch@xxxxx さん 曰く:
> > 最後の仮引数の直前に * がある場合には残りの実引数はみな配列とし てこの引数に格納されます。 可変長引数などと呼ばれる機能です。
> > 最後の仮引数の直前に & があるとこのメソッドに与えられているブロッ クが手続きオブジェクト(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


投稿者 xml-rpc : 2008年8月11日 02:17
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/76160
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。