【发布时间】:2021-05-07 20:49:38
【问题描述】:
在《Scala 编程第 5 版》一书中,在第四章中提到,如果一个类是一个案例类,我们可以使用以下方式创建类的对象:
scala> case class Person(name: String, age: Int)
// defined case class Person
scala> val p = Person("Sally", 39)
val p: Person = Person(Sally,39)
我觉得和下面的正常方式没有什么不同:
scala> class Person(name: String, age: Int)
// defined class Person
scala> val p = Person("Aviral", 24)
val p: Person = Person@7f5fcfe9
我尝试在这两种情况下访问对象,但存在差异。当我声明与 case 类相同的类时,我可以访问其成员:p.name、p.age 而如果我尝试对 通常 声明的类执行相同操作,我会得到以下错误:
1 |p.name
|^^^^^^
|value name cannot be accessed as a member of (p : Person) from module class rs$line$3$.
就构造对象而言,这两种情况有何不同?
【问题讨论】:
-
您查看here找到的答案了吗?
-
@jwvh 我正在考虑单击您的链接并将其作为重复链接关闭。但是,我只发现了 2010 年、2013 年、2017 年某人模糊相关的过于宽泛的答案的一堵可怕的长墙,我不知道还有什么时候。我认为建议询问 Scala-3 的新人阅读自 2010 年以来编写的所有内容没有帮助。
-
这个here也不是很好的复制品,因为它有不同的焦点。
-
@AndreyTyukin 也许是stackoverflow.com/questions/18194005/… 或stackoverflow.com/questions/24113964/…
-
@MarioGalic 看起来不错。如果 Aviral 同意这回答了问题,我建议将其作为重复项关闭。
标签: scala case-class scala-3