From: Shin-ichiro HARA Date: 2002-02-26T13:53:51+09:00 Subject: [ruby-dev:16093] Re: Array#select without block 原です。 >まつもと ゆきひろです >| 私は select に賛成です。今まで条件で選択していたのをキーの列挙で >|選択もできるように拡張するだけと思えば私は違和感はないです。新しい >|メソッド名を作らずに、すでにあるものを解釈の拡張で活かすという意味 >|でも好ましいと思います。 > >ただひとつ気になるといえば、やっぱりちょっと違うものを重ね >ちゃってる点ですね。まあ、「選択」という概念的な共通点がある >のでいいのかなあ。 まずいかもしれないですね。ブロック付き select の一つの重要な性質として、 元の配列の順番は変えない、ってのがあると思います。ブロック付きの方は真 逆で、変える方に力点があると言えなくもない。 at, value_on が駄目なら over, on はどう? ["a", "b", "c"].over(1, 2, 0) #=> ["b", "c", "a"] ["a", "b", "c"].on(1, 2, 0) #=> ["b", "c", "a"] どちらも、いままで使われてない前置詞だけど。 select とはまた別の話かもしれないですが、indices(1, 2, 0) が / [1, 2, 0] と書けてもいいかも。 ["a", "b", "c"] / [1, 2, 0] #=> ["b", "c", "a"] で、「* 配列」を ["a", "b", "c"] * [1, 2, 0] #=> ["c", "a", "b"] で定義するわけ。つまり、* [1, 2, 0] は、1, 2, 0 番目に「移動させる」 という解釈をするわけです。まあ、 ["a", "b", "c"] * [1, 3] #=> [nil, "a", nil, "b"] なんて事になると思うけど。しかし、array のサイズが 3 なら array / [1, 2, 0] * [1, 2, 0] == array なのです。