yarv-dev:270
From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 2 Nov 2004 05:27:29 +0900
Subject: [yarv-dev:270] Re: multiple assgin return value
Yukihiro Matsumoto <matz ruby-lang.org> Mon, 01 Nov 2004 19:56:47 +0900 / [yarv-dev:269] Re: multiple assgin return value ささだです。 > >| 今気付いたんですが、 >| >| p( ( a, b = 1, 2) ) >| #=> [1, 2] >| >|なんですね。 >| >| これは、こうなるべき、なのでしょうか。現在の実装からそうな >|るのはわかるんですが、仕様としてこれが must? > >mustというわけではないでしょうね。 > > * 現状のまま > > ちょっとコストが高いかな > > * 多値を返す > > Ruby2ではCommonLisp流の多値を導入するつもりです。ですか > ら、多値を返したことにするとうもの一つの手です。もっとも > これも実装によってはコストが高いかも 多値について、しっかり決まれば、これが一番綺麗な気がします。 > * 実装依存 > > 既定しないから実装が適当に決められる、ということにする。 > > * nilを返す > > まあ、これが一番楽でしょうかね。さらに押し進めて、 > > a = b = c = 2 > > を文法に組み込んでしまって、代入式自体の値はnilにする > (Python的?)にする手もありますね。 これは、辛いような気がします。while line=gets なんて、よく やりますから。 >いろいろ考えてみましょう。 はい。 ある式について、その値が要求されているかの解析は、現状でも やっていたのを忘れていました。なので、前言っていた「面倒くさい」 という理由は却下。 p( (a, b = 1, 2) ) #=> p( [a = 1, b = 2] ) というように(文法的に)機械的な変換が可能であれば、現状のものも 実装できるかと思います。 Values の扱いがイマイチわからないんですよね。 def mval Values(...) # 便宜上。本当の文法上はどうなるか知らない end a, b, c = mval, 2 はどうなる、とか。 a = mval は結局どうなる、とか。 ちなみに、Values を入れると、結局代入時、rval が Values クラス かどうかのチェックを入れる必要があるんですね。 def assign(lval, rval) if rval.instance_of Values ... else ... end Values であることの判定が十分高速じゃないと、結構性能に響い てきそうですね。 Values が帰ってくるのはメソッドの返り値しかない、という前提 にたてば、そのチェックはメソッドの返り値に対してのみ行えばよい、 ということかもしれませんが。でもなんか大変。 -- // SASADA Koichi at atdot dot net // -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
268 2004-11-01 19:28 [ko1 atdot.net ] multiple assgin return value 269 2004-11-01 19:56 ┗[matz ruby-lang.org ] -> 270 2004-11-02 05:27 ┗[ko1 atdot.net ] 271 2004-11-02 05:38 ┣[ko1 atdot.net ] 273 2004-11-02 08:01 ┃┗[matz ruby-lang.org ] 272 2004-11-02 08:00 ┣[matz ruby-lang.org ] 274 2004-11-02 08:15 ┃┗[ko1 atdot.net ] 275 2004-11-02 08:25 ┃ ┗[matz ruby-lang.org ] 276 2004-11-02 09:14 ┃ ┗[ko1 atdot.net ] 277 2004-11-02 09:36 ┃ ┗[matz ruby-lang.org ] 279 2004-11-02 14:05 ┃ ┣[maeda-yarv atusi.org] multivple values (Re: multiple assgin return value) 280 2004-11-02 14:49 ┃ ┃┗[matz ruby-lang.org ] 281 2004-11-02 17:54 ┃ ┃ ┣[maeda-yarv atusi.org] 282 2004-11-02 18:14 ┃ ┃ ┃┗[ko1 atdot.net ] 284 2004-11-02 19:37 ┃ ┃ ┃ ┗[maeda-yarv atusi.org] 283 2004-11-02 18:16 ┃ ┃ ┗[ko1 atdot.net ] 285 2004-11-02 19:47 ┃ ┃ ┣[matz ruby-lang.org ] 288 2004-11-02 20:43 ┃ ┃ ┃┗[ko1 atdot.net ] 289 2004-11-02 23:31 ┃ ┃ ┃ ┣[shugo ruby-lang.org ] 293 2004-11-03 08:35 ┃ ┃ ┃ ┃┗[ko1 atdot.net ] 290 2004-11-03 01:17 ┃ ┃ ┃ ┗[matz ruby-lang.org ] 291 2004-11-03 03:54 ┃ ┃ ┃ ┣[maeda-yarv atusi.org] 294 2004-11-03 08:57 ┃ ┃ ┃ ┃┗[matz ruby-lang.org ] 296 2004-11-03 11:58 ┃ ┃ ┃ ┃ ┗[maeda-yarv atusi.org] 298 2004-11-03 14:34 ┃ ┃ ┃ ┃ ┣[akr m17n.org ] 299 2004-11-03 15:39 ┃ ┃ ┃ ┃ ┃┗[maeda-yarv atusi.org] 315 2004-11-04 11:46 ┃ ┃ ┃ ┃ ┃ ┗[akr m17n.org ] 307 2004-11-04 01:49 ┃ ┃ ┃ ┃ ┗[matz ruby-lang.org ] 308 2004-11-04 02:08 ┃ ┃ ┃ ┃ ┗[shugo ruby-lang.org ] 310 2004-11-04 02:48 ┃ ┃ ┃ ┃ ┗[matz ruby-lang.org ] 292 2004-11-03 08:32 ┃ ┃ ┃ ┣[ko1 atdot.net ] 300 2004-11-03 17:36 ┃ ┃ ┃ ┃┣[matz ruby-lang.org ] 301 2004-11-03 22:19 ┃ ┃ ┃ ┃┃┗[ko1 atdot.net ] 304 2004-11-03 23:29 ┃ ┃ ┃ ┃┗[shugo ruby-lang.org ] 311 2004-11-04 02:56 ┃ ┃ ┃ ┃ ┗[ko1 atdot.net ] 312 2004-11-04 09:40 ┃ ┃ ┃ ┃ ┗[shugo ruby-lang.org ] 313 2004-11-04 09:45 ┃ ┃ ┃ ┃ ┗[ko1 atdot.net ] 314 2004-11-04 10:58 ┃ ┃ ┃ ┃ ┗[shugo ruby-lang.org ] 316 2004-11-04 12:48 ┃ ┃ ┃ ┃ ┗[ko1 atdot.net ] 295 2004-11-03 09:29 ┃ ┃ ┃ ┗[ko1 atdot.net ] 286 2004-11-02 20:05 ┃ ┃ ┗[maeda-yarv atusi.org] 287 2004-11-02 20:13 ┃ ┃ ┗[matz ruby-lang.org ] 302 2004-11-03 22:21 ┃ ┗[ko1 atdot.net ] 303 2004-11-03 22:54 ┃ ┗[matz ruby-lang.org ] 305 2004-11-03 23:31 ┃ ┗[ko1 atdot.net ] 306 2004-11-04 00:49 ┃ ┗[matz ruby-lang.org ] 278 2004-11-02 12:40 ┗[maeda-yarv atusi.org]