【问题标题】:In Scala, why 'case object' and not just 'object'? [duplicate]在 Scala 中,为什么是“案例对象”而不仅仅是“对象”? [复制]
【发布时间】:2017-02-27 13:04:28
【问题描述】:

我阅读并理解,case class 是发送参数并创建多个对象,case object 不发送任何参数并具有单个对象。所以这将通过object 实现,为什么case object

为什么case object 很重要,什么时候重要?我已经浏览过这篇文章,但我不明白为什么case object

Difference between case class and case object?

【问题讨论】:

  • 我浏览了那个帖子,我没有清除我的疑问,所以我发布了。如果可以的话,请帮助我。
  • @Sarvesh 但是在添加case 时,上述副本提供了完全不同的语义。

标签: scala akka


【解决方案1】:

嗯... Scala 中的 object 可以是 "roughly" 解释为 anonymous class 的一个实例。现在case objectobject 的区别在于anonymous classcase class 还是只是class

说得更清楚,

object A

// is roughly equivalent to something like

class AnonymousClass12345
val A = new AnonymousClass12345()

至于case object

case object A

// is roughly equivalent to something like,

case class AnonymousClass12345
val A = new AnonymousClass12345()

现在应该很容易与case classclass 相关联。作为anonymous case class 的一个实例,case object 获得了任何其他case class 实例所做的所有好处。

注意 :: 此答案旨在提供不准确但易于理解的解释。要更准确地回答这个问题,不仅需要了解class vs type 中很好(但不是很准确)讨论的区别 - answer,还需要了解 Scala 反射。

【讨论】:

  • object AA.type 的一个实例,而不是“匿名类”。
  • 简单来说,case的意思是不可变的,对吗?
  • NO... 作为大 NO。 case classcase objectimmutability无关
  • @mikołak 好吧......我想你没有注意到is roughly equivalent to something like 中的roughly。或者您准备好向像 OP 这样的 Scala 初学者解释 what A.type is ? 了吗?编辑答案以更强调roughly
  • @SarveshKumarSingh:1. Moslty 我注意到在原始修订的一开始就“只是”(现在已编辑,谢谢)。 2. 是的,当然,例如A 是自动生成的“类”A.type 声音的一个实例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多