微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构造函数参数在类和案例类中的处理方式不同吗?

如何解决构造函数参数在类和案例类中的处理方式不同吗?

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

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$.

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

解决方法

正如 Tour Of ScalaScala 3 book 所说

当您创建带有参数的案例类时,参数是公开的 const substitutions = { "A": "E","B": "H","E": "D" }; function transform(input) { return input.replace(/./g,char => { const upperChar = char.toLocaleUpperCase(); if (!(upperChar in substitutions)) return char; const isUpper = char === upperChar; const sub = substitutions[upperChar]; if (isUpper) return sub.toLocaleUpperCase(); return sub.toLocaleLowerCase(); }); } console.log(transform("Hello world!")); console.log(transform("Beautiful!")); console.log(transform("Boats Are Excellent ?"));

因此,在

val

与普通班级不同,case class Person(name: String,age: Int) name 都是公开的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。