我必须在这里遗漏一些愚蠢的东西。我有这个:
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)
为什么不呢?
答案 0 :(得分:13)
从case类继承的Case类(或对象)是一种不好的做法,从Scala 2.9.1开始是非法的。使用object
代替case object
来定义Red
,Green
和Blue
。
答案 1 :(得分:0)
为什么 应该是真的?绿色是伴侣对象,c是一个实例。他们不是相等。
答案 2 :(得分:0)
我认为这是一个相关的问题:“为什么它扩展的案例对象和案例类不相等”。
使用Scala 2.12.2
我在你的例子中添加了以下行,现在对象等于类实例。
object Black extends Color(0x00000000)
val black1 = Color(0x00000000)
black1 == Black
res1:Boolean = true