each_value, values

Mapには、値を巡回するイテレータを返すeach_valueと、それを配列にして返すvaluesがあります。

かなり前の仕様では、値を巡回するイテレータを返すvaluesメソッドしかありませんでした。配列が欲しければ、to_aを呼び出せ、という仕様で。

これ、実際にプログラミングしてみると、to_aを忘れまくって非常に不便でした。で、思わずメソッドを分けてしまい現在に至ってます。

でも、やっぱりeach_hogeとhoges二つ定義するのは面倒なんですよね。ずっと考えていた、イテレータに対し配列の操作をすると、イテレータを全部まわして配列をつくりそれを内蔵して、そこからは配列として振舞うようにする仕様を組み込むことを検討しています。

// mapはイテレータを返す
values: [5, 6, 7].map(|a| a*2);

// values[1]でイテレータは全部実行され、配列を内部に抱え、それが代わりに操作される。
values[1].p; //=>12

// 二回目の values[]は、イテレータは回らず、中に抱えている配列が引き続き操作される。
values[2].p; //=>14