Oli*_*hez 7 functional-programming scala
如果值为Some(...),则执行副作用的最常用方法是什么?如果值为None,则执行另一个副作用.这是我目前倾向于写的内容:
def doSideEffectA(value: Int) {
// ...
}
def doSideEffectB() {
// ...
}
def doSideEffect(valueOption: Option[Int]) {
valueOption map { value =>
doSideEffectA(value)
} getOrElse {
doSideEffectB()
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我没有做任何事情,如果valueOption是None,那么这就是我写的:
def doSideEffectNothingIfNone(valueOption: Option[Int]) {
valueOption foreach { value =>
doSideEffectA(value)
}
}
Run Code Online (Sandbox Code Playgroud)
map/getOrElse通常不用于副作用上下文,而foreach是.我对valueOption map {...} getOrElse {...}返回Unit感到不舒服,因为我没有从我的Option [Int]中"得到"任何东西.
pr1*_*001 13
Kim Stebel说:模式匹配是一个简单的解决方案.
valueOption match {
case Some(value) => doSideEffectA(value)
case None => doSideEffectB()
}
Run Code Online (Sandbox Code Playgroud)
Scala 2.10包含一种fold方法Option,适用于您需要两者None并Some解析为相同类型(包括Unit)的任何情况:
scala> Option("salmon").fold(println("No fish")){f => println(s"I like $f")}
I like salmon
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2462 次 |
| 最近记录: |