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

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  ]