scala case class equals(==)没有按预期工作

Ger*_*mán 7 scala equality case-class

我必须在这里遗漏一些愚蠢的东西.我有这个:

case class Color(val rgb:Int) {
   private val c = rgb - 0xff000000
   val r = (c & 0xff0000) >> 16
   val g = (c & 0x00ff00) >> 8
   val b = (c & 0x0000ff)
}

case object Red extends Color(0xffff0000)
case object Green extends Color(0xff00ff00)
case object Blue extends Color(0xff0000ff)
Run Code Online (Sandbox Code Playgroud)

然后我希望这打印真实:

val c = Color(0xff00ff00)
println(c == Green)
Run Code Online (Sandbox Code Playgroud)

为什么不呢?

4e6*_*4e6 13

从case类继承的Case类(或对象)是一种不好的做法,从Scala 2.9.1开始是非法的.使用object而不是case object定义Red,GreenBlue.

  • case对象创建`equals`,`hashcode`和`apply/unapply`.为什么这是不好的做法? (3认同)
  • @Amir Raminfar:不,它在这种情况下实际上并不存在,因为`Color`和`case`上已经存在的方法只会创建这些方法,如果它们尚未被覆盖的话.@ 4e6:如果你仍然继承一个案例类,那么使用`object`或`case object`并不重要! (2认同)