主构造函数中的Scala局部变量

MyT*_*tle 3 scala scala-primary-constructor

如何在Scala中我可以在主构造函数中定义局部变量?

我需要从Scala for the impatient书中解决这个练习:

编写一个具有主构造函数的Person,该构造函数接受包含第一个名称,空格和姓氏的字符串,例如new Person("Fred Smith").提供只读属性firstName和lastName.主构造函数参数应该是var,val还是plain参数?为什么?

现在我的解决方案看起来像这样:

class Person(firstLast: String) {
  private[this] val firstLastAsArr = firstLast.trim.split(" ")

  val firstName = firstLastAsArr (0)
  val lastName = firstLastAsArr (1)
}
Run Code Online (Sandbox Code Playgroud)

如何限制firstLastAsArr主要构造函数范围的变量可见性(现在它有类范围)?

Rég*_*les 5

一种解决方案是初始化firstNamelastName立即进行,从而允许firstLastAsArr在初始化块内转换为本地临时值:

class Person(firstLast: String) {
  val (firstName, lastName) = {
    val firstLastAsArr = firstLast.trim.split(" ")
    (firstLastAsArr(0), firstLastAsArr(1))
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @MalteSchwerhoff哇?`"John Doe".trim.split("")`导致`Array(John,Doe)` (3认同)