From: Minero Aoki Date: 2007-02-26T15:17:46+09:00 Subject: [ruby-dev:30429] Re: Arrayのメソッド増強について 青木です。 On 2007/02/26, at 14:09, Tadashi Saito wrote: > 斎藤と申します。Haskellを知らない素人がしゃしゃり出るの > もあれなのです > が、知らない人間として考えたことを投稿してみます。 >> |--- Array#take {|item| .... } 別名案:take_while, slice{} > > takeだと、単語として抽象的過ぎないでしょうか。中身を「取って来 > る」 > メソッドは既存の中にいくつもありますし。 > > また、Haskellを知らない人に取っては類推も効かないと思い > ます。例えば take > 追加後にRubyを勉強した人が fetch も勉強した後、 > どっちがどっちか分からな > くなりそうで心配です。 では、take_while (で、ブロック付きのみ) ならどうです か? >> |--- Array#drop {|item| .... } 別名案:lstrip, drop_while, > > 上記のselectとの類比と同じく「重複のないreject」と > 見た時、やはり分かり辛 > いと思います。 > 上記2つのブロック付きの物については、青木さんは > ary.uniq.select {...} > が長過ぎる(効率も悪そう)という意見なのだと推測しま > した。でしたらselect いえ、それは違います。Array#drop は順番を保ったまま配列を 処理するために使うメソッドです。例えばメールの文字列を 行単位の文字列配列で持っているとき、 body = lines.drop {|line| not line.strip.empty? } と書くとメール本体 (の最初にセパレータの空行が付いたも の) が 得られるわけです。 まあ、この場合は Array#split のほうが明らかに便利で、 header, body = lines.split(2) {|line| line.strip.empty? } でヘッダとボディが得られます。 -- 青木峰郎