From: hisanori@... Date: 1999-01-29T13:30:46+09:00 Subject: [ruby-list:11803] Array クラス 松尾です。 Arrayクラスがなんとなく使い難くて(失礼_o_)、今書いてるスクリプト用に以 下のようなクラスを作って使ってます。 # 皆さんはどうしてるんでしょう? そう思ってるのは僕だけかしら…。 class Array2 < Array # 非破壊的filter # 与えられたブロックで要素を処理し、その結果の配列を返す。 def filter2 return dup.filter{|i| yield(i)} end # 所謂grep # 与えられたブロックが真になる要素だけで作られた配列を返す。 def grep return filter2{|i| if yield(i) then i else nil end}.compact end # 拡張join # 与えられたブロックで処理した後で、sepでjoinする。nilは飛ばす。 def join2(sep) return filter2{|i| yield(i)}.compact.join(sep) end # 与えられたブロックが真になる最初の要素を返す。 # findNextは、ない…。 def findFirst each{|i| if yield(i) then return i end } return nil end end で、よくよくArrayクラスのメソッド眺めてみると、sortやuniqの様に破壊的 なのと非破壊的なのと両方与えられているメソッドと、そうでないメソッドが あって。filterなんて非破壊的なのもあって良さそうに思えるし、実際よく使 うので今回filter2を作ったんですね。 なので、そうする事に意味のあるメソッドについては、破壊/非破壊の両方を 持つように揃える、というのは如何でしょうか。 # 今更filterとfilter!にするというのは副作用がかなり大きいと思いますが。