Scala 重写AnyRef类中的equals方法不起作用

Scala 重写AnyRef类中的equals方法不起作用,scala,Scala,我试图看看equals方法是否可以在Car(AnyRef)类中过度编写。它不起作用。有人能指出equals方法的错误吗 class Car(name:String, price:Float) { override def equals(that:Any):Boolean = { val thatCar = that.asInstanceOf[Car] name == thatCar.name } } val aCar1 = new Car("Honda", 1000)

我试图看看equals方法是否可以在Car(AnyRef)类中过度编写。它不起作用。有人能指出equals方法的错误吗

class Car(name:String, price:Float) {

  override def equals(that:Any):Boolean = {
    val thatCar = that.asInstanceOf[Car]
    name == thatCar.name
  }
}
val aCar1 = new Car("Honda", 1000)
val aCar2 = new Car("Honda", 1000)
aCar1==aCar2

我想这就是你想要的

class Car(val name:String, val price:Float){
  override def equals(that:Any):Boolean = that match {
    case x: Car => name == x.name
    case _ => false
  }
}

val aCar1 = new Car("Honda", 1000)
val aCar2 = new Car("Honda", 2100)
val aCar3 = new Car("Dodge", 3300)
aCar1==aCar2    // res0: Boolean = true
aCar1==aCar3    // res1: Boolean = false
aCar1=="Honda"  // res2: Boolean = false

请注意,除非声明为
val
,否则无法访问
Car.name
构造函数参数,否则它是实例的私有参数。

@jwvh已经给出了一个很好的答案。只是想补充一下,您还可以使用
案例类

case class Car(name: String, price: Float) {
  override def equals(that: Any): Boolean = that match {
    case x: Car => name == x.name
    case _ => false
  }
}

val car1 = Car("Honda", 8000)
val car2 = Car("Audi", 9000)
val car3 = Car("Honda", 7500)

car1 == car2  // false
car1 == car3  // true