класс случая scala равен (==) не работает должным образом - PullRequest
7 голосов
/ 23 августа 2011

Я, должно быть, упускаю что-то глупое здесь.У меня есть это:

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 ]

13 голосов
/ 24 августа 2011

Case-классы (или объекты), наследуемые от case-классов, являются плохой практикой и недопустимы в Scala 2.9.1.Используйте object вместо case object для определения Red, Green и Blue.

0 голосов
/ 20 февраля 2018

Я думаю, что это был уместный вопрос: «Почему объект case и класс case, которые он расширяет, не равны».

Используя Scala 2.12.2

Я добавил следующие строки в ваш пример ии теперь объект равен экземпляру класса.

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

res1: Boolean = true

0 голосов
/ 24 августа 2011

Почему должно быть правдой?Зеленый - объект-компаньон, c - экземпляр.Они не равны.

...