まつもと ゆきひろです

そもそもの問題点をあげておくと

  * indexの複数形はindexesとindicesの両方があるのが混乱のも
    と(両方提供してるけど)

  * それにindex(値を指定してそのインデックスを得る)メソッド
    とindexes(インデックスを複数指定して対応する値の配列を得
    る)は同じ単語なのに意味が逆というのは致命的

という点です。後者が重要です。

In message "[ruby-dev:16083] Re: Array#select without block"
    on 02/02/26, Koji Arai <JCA02266 / nifty.ne.jp> writes:

|> よりよい案があれば聞きたいんですが、いかがでしょう?
|
|talk で挙がった候補って列挙できますか?

|一部、探して列挙してみますと。
|
|[ruby-talk:10848] #values_of
|[ruby-talk:10885] Array#elements, Hash#values
|[ruby-talk:10886] Array#elements_at, Hash#values_at
|[ruby-talk:10896] Array#elements_at  Hash#values_for
|[ruby-talk:11004] #at
|[ruby-talk:10888] #subset
|[ruby-talk:10888] #selections
|[ruby-talk:10888] #collect_indexes, #select_indexes

全部は覚えてないんですが、その辺ではないかと。

|あっ、
|  values([key, ...])
|は、いいんではないかなあと思ったのですが、そういう意見もあり
|ますね。しかもそれほど悪くない反応なのでは?この場合 keys,
|index はというと、そのままでいいかな。

valuesの問題点は引数がない場合の挙動が妙だという点です。つま
り、Hash#valuesは互換性の点から空配列ではなくハッシュの値の
配列を返す必要があります。普通に使うぶんにはあまり問題ではな
いように思えるのですが、

  h.values(*ary)

のようなケースだとaryが空配列である場合を特別扱いするケース
はうまくないのではないかと思います。

そのほかのは

  - values_of           日本人が言うのもなんだがやはり変
  - *_at                複数のインデックスに対してatはないだろう
  - elements*, values*  ハッシュと配列でメソッド名を揃えたい
  - at                  複数のインデックスに対してatはないだろう
  - subset              setではないよね
  - selections          って動詞じゃない
  - collect_indexes     indexの複数形は避けたい(元々の問題が解消してない)

とどれも気に入りません。

一方、selectは(私がある日フト思いついたものですが)、

  * 選択するイメージはある

  * Enuemrable#selectは必ず「無引数」で「ブロックを取る」の
    で、「ブロックなしで引数としてインデックスを指定して、選
    択する」ことに別の挙動を割り当てても混乱は少ないのでは。

という理由で、私には妥協可能なレベルでした。

                                まつもと ゆきひろ /:|)