0

在《Programming in Scala 5th Edition》一书中,在第四章中提到,如果一个类是一个案例类,我们可以使用以下方式创建类的对象:

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.namep.age而如果我尝试对通常声明的类执行相同操作,则会收到以下错误:

1 |p.name
  |^^^^^^
  |value name cannot be accessed as a member of (p : Person) from module class rs$line$3$.

就构造对象而言,这两种情况有何不同?

4

1 回答 1

2

正如 Scala 之Scala 3 书所说

当你创建一个带参数的案例类时,参数是 public val

因此,在

case class Person(name: String, age: Int)

两者都nameage是公开的,这与普通班级不同。

于 2021-05-07T21:56:55.903 回答