【发布时间】:2017-02-11 16:45:31
【问题描述】:
Scala 标准库中的Option 是否有某种“tee”操作?我能找到的最好的是foreach,但它的返回类型是Unit,因此它不能被链接。
这就是我要找的:给定一个Option 实例,如果选项不为空(Some[A]),则执行一些对其值有副作用的操作,否则什么也不做;在任何情况下都返回选项。
我有一个使用隐式类的自定义实现,但我想知道是否有更常见的方法可以在没有隐式转换的情况下做到这一点:
object OptionExtensions {
implicit class TeeableOption[A](value: Option[A]) {
def tee(action: A => Unit): Option[A] = {
value foreach action
value
}
}
}
示例代码:
import OptionExtensions._
val option: Option[Int] = Some(42)
option.tee(println).foreach(println) // will print 42 twice
val another: Option[Int] = None
another.tee(println).foreach(println) // does nothing
有什么建议吗?
【问题讨论】:
-
我认为您不会看到任何将副作用隐式注入标准库中的函数的内容。
-
副作用和函数式编程不是朋友。
-
您可以简单地将您的副作用操作放入法线贴图/平面贴图方法中。
-
根据this SO answer,它在 ruby 代码中被称为“红隼”。 (免责声明:我不知道红宝石。)
标签: scala functional-programming