[ruby-dev:31916] Re: generator from Enumerable#map

From: "Yusuke ENDOH" <mame@...>
Date: 2007-09-30 10:25:42 UTC
List: ruby-dev #31916
遠藤です。

> |> 1.9 では、Enumerable#map や Enumerable#index をブロックなしで呼ぶと
> |> generator を返すようですが、これは Object#to_enum と何か異なるの
> |> でしょうか。
>
> 異なっていません。その存在に対称性以外の理由はありません。特
> に便利だと思っているわけではないです。対称性(とか直交性)は
> Rubyの設計基準では優先度が低いので、なにか理由があればそれを
> ひっくりかえすことに異論はありません。

対称性の意味がよくわかりませんが、

  each も map もイテレートする点で似ているから、
  each でブロックを省略した時 generator を返すなら、
  map でブロックを省略した時も generator を返すべき

ということでしょうか。そこだけ対称にしても、map や index の本来の
機能を generator で生かせないのでは、中途半端すぎると感じました。

私の考える対称性は、

  each も map もイテレートする点で似ているから、
  each がブロックでも generator でもその機能を使えるなら、
  map もブロックでも generator でもその機能を使えるべき

なので、Enumerator#value= みたいな仕組みがあった方が対称性があると
感じます。

でもこういう設計センスは多分まつもとさんの方が良いので、そんなに強く
主張する気はありません (笑)


あえて客観的っぽい反対理由を上げるとすれば、

  - ブロックを書き忘れたときのバグに気がつきにくくなる
      (この仕様に気がついたのもブロックの書き忘れではまったから)
  - 実益も大きな意味もないなら仕様変更はしない方がいい

ですが、どちらもくだらないことなので、これも積極的には主張しません。

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread