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

时间:2011-08-23 19:59:33

标签: 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)

然后我希望打印 true

val c = Color(0xff00ff00)
println(c == Green)

为什么不呢?

3 个答案:

答案 0 :(得分:13)

从case类继承的Case类(或对象)是一种不好的做法,从Scala 2.9.1开始是非法的。使用object代替case object来定义RedGreenBlue

答案 1 :(得分:0)

为什么 应该是真的?绿色是伴侣对象,c是一个实例。他们不是相等。

答案 2 :(得分:0)

我认为这是一个相关的问题:“为什么它扩展的案例对象和案例类不相等”。

使用Scala 2.12.2

我在你的例子中添加了以下行,现在对象等于类实例。

object Black extends Color(0x00000000)
val black1 = Color(0x00000000)
black1 == Black

res1:Boolean = true