给出以下案例类:
scala> case class Foo(x: Int)
defined class Foo
scala> case class Bar(x: Int)
defined class Bar
编译器在尝试比较不同案例类的实例时会显示警告。
scala> Foo(5) == Bar(5)
<console>:15: warning: comparing case class values of types Foo and Bar using `==' will always yield false
Foo(5) == Bar(5)
^
res8: Boolean = false
但为什么以下比较不会发出警告?
scala> (5 : Int) == (10 : Double)
res9: Boolean = false
答案 0 :(得分:4)
因为==
是Int
的重载方法,其中一个接受Double
作为参数类型(同样适用于Double
,还有许多其他类型)。这是100%合法的。
abstract def ==(x: Double): Boolean
请参阅scaladocs。
答案 1 :(得分:0)
我想res8: Boolean = false
的原因是因为您通过比较Foo and Bar
来比较对象Foo(5) == Bar(5)
的实例,因为实例的地址总是不同而{{1}警告显示结果很明显。在验证之前,false
方法总是将参数转换为double。
试试这个
==