【发布时间】:2017-01-27 23:57:13
【问题描述】:
我有两个vals,一个condition 和一个option。请注意,condition 是一个简单的布尔值,不取决于选项的值。
如果condition 成立,我想映射选项以将其转换为结果值。在所有其他情况下,我想返回 defaultResult。
这行得通并且可读性很好,但我不喜欢defaultResult的重复:
val result = if (condition) {
option.map(valueToResult).getOrElse(defaultResult)
} else {
defaultResult
}
我的第二种方法没有重复,但我不喜欢过滤器被滥用于实际上不依赖于选项值的东西的事实:
val result = option.filter(_ => condition).map(valueToResult).getOrElse(defaultResult)
在 Scala 中有什么更惯用或更好的方法?
【问题讨论】:
-
为什么你觉得
filter被滥用了?因为它基于与Option[T]的基础值无关的外部值进行过滤?没有规定“仅使用filter过滤掉底层Option[T]的属性”。我会选择第二个。 -
没错。我知道没有规则,这只是个人(不)口味。
-
我明白你的意思。我有时也会有这种感觉。请参阅我的答案以获取可能的替代解决方案。
-
对
Boolean- existentialtype.wordpress.com/2011/03/15/boolean-blindness 的错误选择的旁注。
标签: scala