From: matz@... (Yukihiro Matsumoto) Date: 2002-02-26T03:30:32+09:00 Subject: [ruby-dev:16084] Re: Array#select without block まつもと ゆきひろです そもそもの問題点をあげておくと * indexの複数形はindexesとindicesの両方があるのが混乱のも と(両方提供してるけど) * それにindex(値を指定してそのインデックスを得る)メソッド とindexes(インデックスを複数指定して対応する値の配列を得 る)は同じ単語なのに意味が逆というのは致命的 という点です。後者が重要です。 In message "[ruby-dev:16083] Re: Array#select without block" on 02/02/26, Koji Arai 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は必ず「無引数」で「ブロックを取る」の で、「ブロックなしで引数としてインデックスを指定して、選 択する」ことに別の挙動を割り当てても混乱は少ないのでは。 という理由で、私には妥協可能なレベルでした。 まつもと ゆきひろ /:|)