yarv-dev:582
From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 16 Aug 2005 06:54:17 +0900
Subject: [yarv-dev:582] yield multi values
ささだです。
現在のイテレータの仕様では、多値(Values)や配列を yield に渡したと
き、受け側のブロックパラメータの数でどうなるか色々変わります。
h = {:a => 1}
h.each{|k, v|
p [k, v] #=> [:a, 1]
}
h.each{|kv|
p kv #=> [:a, 1]
}
他にも、
[1,2,3].each{|a|
p a #=> [1, 2, 3]
}
[1,2,3].each{|a, b|
p [a, b] #=> [1, 2]
}
とか。
この辺はブロックパラメータの引数の設定は多重代入である、という原則があ
るためですが、この仕様は Ruby2.0 においても同様でしょうか。それとも、変
わりますか。あと、考え中とか。
この辺は YARV ではスゲーアドホックにやっています。ただ、「多重代入の原
則」を利用した既存のプログラムが結構たくさんあるため、これからの開発をど
うしたもんかなー、と悩んでいます。
アドホックに対応してるのは、ネストしてない多重代入のやつで、ネストして
るやつはそもそも非対応。
((a, b), c) = [[1, 2], 3] #=> 非対応
ついでに、これは Ruby 2.0 にも持ち込むこと決定ですかね。決定なら真面目
に実装します。
--
// SASADA Koichi at atdot dot net
//
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
-> 582 2005-08-16 06:54 [ko1 atdot.net ] yield multi values 583 2005-08-16 08:15 ┣[ko1 atdot.net ] 612 2005-09-16 16:54 ┗[matz ruby-lang.org ]