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

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]