我有兩個變數是可選的雙數,我想在它們是0時將它們視為None
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 : "/span> (x y).reduceOption(_ - _)) //-4
x = Option(4)
y = None[/span][/span]。
println("Expected 4 : " (x y).reduceOption(_ - _) // 4
x = None[/span]。
y = Option(4.0)
println("Expected -4 : "/span> (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
uj5u.com熱心網友回復:
既然如此,正如評論中已經建議的,直接的方法是使用 你需要精確的
標籤: 上一篇:Python影像的串行輸出
下一篇:斯帕克。找到前N個值的高性能方法
(x y).reduceOption(_ - _)是一個完美的例子,說明如何在Scala中迷惑人IMHO。 對Option的操作并不直接,因為它們也是Seq。
getOrElse:x.getOrElse(0d) - y.getOrElse(0d)
d來得到一個Double,否則,你會得到一個AnyVal,因為AnyVal是Int(來自getOrElse)和Double(選項中的值)的唯一共同父型別。
