相当于Scala中Ruby的#tap方法

时间:2013-05-24 19:10:14

标签: scala combinatory-logic

Ruby有一个方法,允许我们观察值的管道,而不修改基础值:

# Ruby
list.tap{|o| p o}.map{|o| 2*o}.tap{|o| p o}

Scala中有这样的方法吗?我相信这被称为Kestrel Combinator,但不能确定。

1 个答案:

答案 0 :(得分:4)

以下是github上的一个实现:https://gist.github.com/akiellor/1308190

在此处再现:

import collection.mutable.MutableList
import Tap._

class Tap[A](any: A) {
  def tap(f: (A) => Unit): A = {
    f(any)
    any
  }
}

object Tap {
  implicit def tap[A](toTap: A): Tap[A] = new Tap(toTap)
}

MutableList[String]().tap({m:MutableList[String] =>
  m += "Blah"
})

MutableList[String]().tap(_ += "Blah")

MutableList[String]().tap({ l =>
  l += "Blah"
  l += "Blah"
})