无法将[-]应用于scala中的任何val
我正在编写一些代码来比较两个双精度值,并将其中一个值从字符串解析为双精度值。如下所示:无法将[-]应用于scala中的任何val,scala,playframework,jvm,implicit,Scala,Playframework,Jvm,Implicit,我正在编写一些代码来比较两个双精度值,并将其中一个值从字符串解析为双精度值。如下所示: val diffFun0 = (dims:Dims) => (dims.score == zippedSubs(dims.dimension_name).trim.toDoubleOption.getOrElse(0)) val diffFun = (dims:Dims) => (dims.score - zippedSubs(dims.dimension_name).trim.toDo
val diffFun0 = (dims:Dims) => (dims.score == zippedSubs(dims.dimension_name).trim.toDoubleOption.getOrElse(0))
val diffFun = (dims:Dims) => (dims.score - zippedSubs(dims.dimension_name).trim.toDoubleOption.getOrElse(0)).abs > 0.01
//zippedSubs(dims.dimension_name) is double inside string "0.1" or something else
diffLen0 += ods.dimensions.count(diffFun0) //play.sbt.PlayExceptions$CompilationException: Compilation error[Overloaded method value [-] cannot be applied to (AnyVal)]
diffLen += ods.dimensions.count(diffFun) //works totally fine
IDE显示的是zippedSubs(dims.dimension_name).trim.toDoubleOption.getOrElse(0)是double类型,当我们使用==运算符时,一切正常。但在其他情况下不是这样。您将类型
Double
与Int
混合在一起,从而获得AnyVal
。用getOrElse(0.0)
替换getOrElse(0.0)
,一切都应该正常
“0”.toDoubleOption.getOrElse(0)
//val res0:AnyVal=0.0
“0.toDoubleOption.getOrElse(0.0)
//val res0:Double=0.0
您正在将类型Double
与Int
混合,从而获得AnyVal
。用getOrElse(0.0)
替换getOrElse(0.0)
,一切都应该正常
“0”.toDoubleOption.getOrElse(0)
//val res0:AnyVal=0.0
“0.toDoubleOption.getOrElse(0.0)
//val res0:Double=0.0
谢谢,它起作用了,但是为什么在==运算符情况下工作==
不要求两个操作数都是同一类型,而且它是为所有类型定义的。相比之下,方法-
不存在于AnyVal
切向上,由于一致性较弱,“0”。如果预期类型为双精度,则toDoubleOption.getOrElse(0)
将起作用,但是如果将类型留待推断,则不会这样做:感谢它起作用了,但是为什么在==运算符情况下工作==
并不要求两个操作数都是相同的类型,并且它是为所有类型定义的。相比之下,-
方法不存在于AnyVal
切向上,因为一致性较弱,“0”。如果预期的类型为双精度,则toDoubleOption.getOrElse(0)
将起作用,但如果类型留待推断,则不起作用: