Ruby 1.9で導入されたObject#tapはRuby 1.8でも1.8.7から使えるようになった。 tapメソッドとは何かというと、自分自身にブロックを作用させて自分自身を返すだけのメソッドだ。つまり副作用専門メソッド。定義はいたって簡単、コレ。 class Object def tap yield(self) self end end たとえば、1〜4の二乗のうち10以上のものを求めたいんだけど、デバッグ時とかで途中経過である1〜4の二乗を表示してほしいなんて場合はこんな感じに。いらなくなったらtapの部分を消せばいい。楽チン。 ary = [1, 2, 3, 4] ary.map{|x| x**2}.tap{|a| p a}.select {|x| x>10 } # => [16] # >> [1, 4, 9, 16] ほかにも、破壊的メソッドを適用した後で自分自身を返す場合にも