[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:610

From: MAEDA Atusi <maeda-yarv atusi.org>
Date: 16 Sep 2005 13:35:16 +0900
Subject: [yarv-dev:610] Re: 多重代入の値 (was Re: *expr)

Yukihiro Matsumoto <matz ruby-lang.org> writes:

> 「多重代入の値」はなにがいいんでしょうね。「値はない」という
> のはRuby的にあんまり良くないと思うのですが、だとするとnilと
> か「最初の値」とか「最後の値」とか。

x, y = (a, b = *[1, 2])

とかを考えると,「右辺の値そのまま」で良いんじゃないかと思いますが.

で,単一の値しか要求しない文脈に多値を渡すと,「最初の値」(値が0個なら
nil)とか.

以前の話で,
・多値を作れる(返せる)
・多値を変数に束縛(代入)できる
・多値をメソッドに渡せる
ができれば十分という話が出ていて,

・多値を作れる(返せる)
  *配列
  return 値, 値, ...
  多重代入の右辺
・多値を変数に束縛(代入)できる
  多重代入
・多値をメソッドに渡せる
  ペンディング(配列経由?)

という案でしたよね.(メソッド呼び出しと継続呼び出しの機能を同じにすべ
きか,という議論もありましたが.)

メソッドへ渡す際には,とりあえず変数へ代入することにすれば,大体そろっ
たことになるんじゃないでしょうか.

あとは,多重代入の右辺や,returnでの式の並びで
  return 多値式, 多値式
と書いた場合,すべての値が返されるのか,多値のうちの最初の値だけとって,
2つの値が返されるのか,とか.

def mv1
  return 1, 2
end
def mv2
  return mv1, 3
end

a,b,c=mv2
p c  # nil or 3?
a,b,c=mv1,4
p c  # nil or 4?

				前田敦司

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       598 2005-09-09 17:53 [ko1 atdot.net       ] *expr                                   
       601 2005-09-11 00:36 ┗[matz ruby-lang.org  ]                                       
       602 2005-09-16 05:00  ┗[ko1 atdot.net       ]                                     
       604 2005-09-16 08:21   ┗[matz ruby-lang.org  ]                                   
       606 2005-09-16 09:12    ┗[ko1 atdot.net       ]                                 
       608 2005-09-16 09:18     ┗[matz ruby-lang.org  ] 多重代入の値  (was Re: *expr) 
->     610 2005-09-16 13:35      ┗[maeda-yarv atusi.org]                             
       611 2005-09-16 16:31       ┗[matz ruby-lang.org  ]