无法将[-]应用于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)
将起作用,但如果类型留待推断,则不起作用: