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

ケースクラスから継承するケースクラス(またはオブジェクト)は悪い習慣であり、Scala2.9.1の時点では違法です。objectの代わりにを使用して、、およびcase objectを定義します。RedGreenBlue

于 2011-08-23T20:15:23.237 に答える
0

なぜそれが真実である必要がありますか?緑はコンパニオンオブジェクト、cはインスタンスです。それらは等しくありません。

于 2011-08-23T20:48:21.023 に答える
0

「なぜケースオブジェクトとそれが拡張するケースクラスが等しくないのか」という関連する質問だったと思います。

Scala2.12.2の使用

例に次の行を追加しましたが、オブジェクトはクラスインスタンスと同じになりました。

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

res1:ブール値= true

于 2018-02-20T10:49:36.080 に答える