Scala 比较Int和Double-没有警告?
鉴于以下案例类别:Scala 比较Int和Double-没有警告?,scala,equality,Scala,Equality,鉴于以下案例类别: scala> case class Foo(x: Int) defined class Foo scala> case class Bar(x: Int) defined class Bar 编译器在尝试比较不同case类的实例时显示警告 scala> Foo(5) == Bar(5) <console>:15: warning: comparing case class values of types Foo and Bar using `
scala> case class Foo(x: Int)
defined class Foo
scala> case class Bar(x: Int)
defined class Bar
编译器在尝试比较不同case类的实例时显示警告
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
因为==是Int的重载方法,其中一个接受Double作为参数类型,Double和其他许多方法也是如此。这是100%合法的
abstract def ==(x: Double): Boolean
请参阅。,因为==是Int的重载方法,其中一个方法接受Double作为参数类型,Double和其他许多方法也是如此。这是100%合法的
abstract def ==(x: Double): Boolean
请参阅。我猜res8:Boolean=false的原因是,您通过比较Foo5==Bar5来比较对象Foo和Bar的实例,因为实例的地址总是不同的,错误结果在警告中很明显。在验证之前,==方法总是将参数转换为double
像这样试试
case class Foo(x: Int)
case class Bar(x: Double)
val a = Foo(5)
val b = Bar(5)
a.x == b.x //res4: Boolean = true
a == b //res5: Boolean = false
我猜res8:Boolean=false的原因是,您正在通过比较Foo5==Bar5来比较对象Foo和Bar的实例,因为实例的地址总是不同的,错误的结果在警告中很明显。在验证之前,==方法总是将参数转换为double
像这样试试
case class Foo(x: Int)
case class Bar(x: Double)
val a = Foo(5)
val b = Bar(5)
a.x == b.x //res4: Boolean = true
a == b //res5: Boolean = false