Ruby 1.9 で標準装備になったという tap メソッド [1] [2] というのがかなりかっこいい。この場合の tap って多分電源タップの意味だろうか。メソッドチェーンの流れを切るまいとする Ruby 的な発想なんだろうと思う。 というわけで Scala でもやってみた。仕組み自体はおなじみのもの。Scala でも特に問題無い様に思われる。 scala> class Tap[T](obj: T) { | def tap(block: T => Unit): T = { block(obj); obj } | } defined class Tap scala> implicit def any2tap[T](obj: T): Tap[T] = new Tap(obj) any2tap: [T](T)Tap[T] scala> val l = List(2, 1, 4, 5, 3)