scala 案例类等于 (==) 未按预期工作

发布于 2024-12-01 04:53:07 字数 494 浏览 1 评论 0原文

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

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)

为什么不呢?

I must be missing something silly here. I have this:

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)

Then I expect this to print true:

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

Why doesn't it??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

留一抹残留的笑 2024-12-08 04:53:07

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

Case classes (or objects) inheriting from case classes is a bad practice, and is illegal as of Scala 2.9.1. Use object instead of case object to define Red, Green and Blue.

狼性发作 2024-12-08 04:53:07

为什么应该这是真的? Green 是伴生对象,c 是实例。它们相等。

Why should that be true? Green is a companion object, c is an instance. They aren't equal.

月牙弯弯 2024-12-08 04:53:07

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

使用 Scala 2.12.2,

我在示例中添加了以下几行,现在对象等于类实例。

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

res1:布尔值= true

I think it was a relevant question: "Why case object and case class it extends are not equal".

Using Scala 2.12.2

I added following lines to your example and and now object is equal to the class instance.

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

res1: Boolean = true

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文