如果一个值是 Some(...) 并且如果一个值是 None 做另一个副作用,那么最惯用的方法是什么。以下是我目前倾向于写的内容:
def doSideEffectA(value: Int) {
// ...
}
def doSideEffectB() {
// ...
}
def doSideEffect(valueOption: Option[Int]) {
valueOption map { value =>
doSideEffectA(value)
} getOrElse {
doSideEffectB()
}
}
我的问题是,如果 valueOption 为 None,我不需要做任何事情,这就是我要写的:
def doSideEffectNothingIfNone(valueOption: Option[Int]) {
valueOption foreach { value =>
doSideEffectA(value)
}
}
map/getOrElse 通常不用于副作用上下文,而 foreach 是。我对 valueOption map { ... } getOrElse { ... } 返回 Unit 不太满意,因为我并没有真正从我的 Option[Int] 中“获取”任何东西。