Man*_*oid 2 scala scala-option
我有 2 个选项,我需要取它们持有的值的平均值。
有可能缺少一个或两个。如果缺少其中一个值,我只会将另一个值作为平均值。但如果两者都缺失,我会求助于一些默认值。
如何以干净的方式做到这一点?
我可以使用 isEmpty 检查值的缺失,但是这与空检查不一样吗?
我想这是不言自明的:
val option1 = Some(12.0)
val option2 = None
val default = 0.0
val average = (option1, option2) match {
case (Some(val1), Some(val2)) => (val1 + val2) / 2
case (None, Some(val2)) => val2
case (Some(val1), None) => val1
case (None, None) => default
}
Run Code Online (Sandbox Code Playgroud)
...但如果不是,基本思想是您构造一个选项元组,然后在该元组上进行模式匹配。
这有一个好处是显式捕获所有四种可能的情况 + 得到编译器的支持 - 由于Option是一个密封特性,编译器可以检查并确保覆盖了模式匹配的所有潜在分支。