7

我一定在这里遗漏了一些愚蠢的东西。我有这个:

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)

为什么不呢??

4

3 回答 3

13

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

于 2011-08-23T20:15:23.237 回答
0

为什么这应该是真的?绿色是伴随对象,c 是实例。他们不平等

于 2011-08-23T20:48:21.023 回答
0

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

使用 Scala 2.12.2

我在您的示例中添加了以下几行,现在 object 等于类实例。

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

res1:布尔=真

于 2018-02-20T10:49:36.080 回答