yarv-dev:292
From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 3 Nov 2004 08:32:22 +0900
Subject: [yarv-dev:292] Re: multivple values (Re: multiple assgin return value)
Yukihiro Matsumoto <matz ruby-lang.org> wrote :
[ [yarv-dev:290] Re: multivple values (Re: multiple assgin return value) ]
at Wed, 03 Nov 2004 01:17:54 +0900
ささだです。
> 問題はyieldなどでひとつの配列を渡した場合と、複数の値を配列
> として渡されたのか区別できるのに、returnではできなくなること
> です。
>
> yield [1,2,3]
> yield 1,2,3
> yield *[1,2,3]
ところで、 yield は、配列で渡しても展開しない、という前提
でいいんですよね?
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/23563
def iter
yield [1,2]
end
iter do |a, b|
p a #=> [1, 2]
p b #=> nil
end
> return [1,2,3]
> return 1,2,3
> return *[1,2,3]
>
> あまりに対称性がないような。yieldでも区別できなくするという
> のは、できないような気がしますし(右辺だから)。
return *[1,2,3] や return 1, 2, 3 を不可にする、というのは
どうですか。または、return 1, 2, 3 は return [1, 2, 3] の
シンタックスシュガー。(それは今と一緒か)
どうせ return なんて使わないしぃ。
return で示す値と、多重代入の左辺値、yield の引数などとの
対象性は必要なものなんでしょうか。そろってると綺麗だな、と
思うんですが、実益はどんなものになりましょうか。
まとめるとこんな感じでしょうか。
Pros:
P1. 多値を文法要素としてきっちり規定できて美しい
P2. 多値を、単値を使う場合のプログラミングが楽
P3. 多値を扱うための実行速度の向上
Cons:
C1. 単値のみで場合、多値のサポートのためにちょっと実行時の
オーバーヘッドが増える(可能性がある)
C2. 多値、という文法要素を覚える必要がある
本質的なオーバーヘッドが増えてくれたほうが、私的にはやりが
いがある、と言えるんだろうか。
なんか考え出すと、現状の動作でいいような気がしてきてしまっ
た orz それだけよく考えられてるということでしょうか。
ruby-dev でやる話のような気がしてきました。でも前田さんの
意見はとてもためになるしなぁ。
--
// 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]