【发布时间】:2021-11-14 10:26:54
【问题描述】:
我有两个可选的 double 变量,当它们是 None 时,我想将它们视为 0
var x: Option[Double] = Option(0)
var y: Option[Double] = Option(0)
println("Expected 0 : "+(x ++ y).reduceOption(_ - _)) // 0
x = Option(4)
y = Option(0)
println("Expected 4 : "+(x ++ y).reduceOption(_ - _)) // 4
x = Option(0)
y = Option(4)
println("Expected -4 : "+(x ++ y).reduceOption(_ - _)) // -4
x = Option(4)
y = None
println("Expected 4 : "+(x ++ y).reduceOption(_ - _)) // 4
x = None
y = Option(4.0)
println("Expected -4 : "+(x ++ y).reduceOption(_ - _)) // 4
我期待的最后一个-4,但我得到了4。
如果我使用
(for (i <- x; j <- y) yield i - j)
然后我得到None。
如果我尝试一下
x.getOrElse(0) - y.getOrElse(0) // value - is not a member of AnyVal
然后我得到错误value - is not a member of AnyVal
【问题讨论】:
-
None ++ Option(4.0)计算结果为Iterable(4.0)。由于集合中只有一个元素,因此无需减少任何内容。 -
0不是Double。为此,您需要0.0或0D或0d。在您的getOrElse()电话中尝试一下。