Scala 抽象val而不是主构造函数参数

Scala 抽象val而不是主构造函数参数,scala,scala-primary-constructor,Scala,Scala Primary Constructor,考虑这两个类以及创建实例的方式: class Person1(val name: String) val p1 = new Person1("John"); 以及: 为什么人们更喜欢后者(Person2)版本?每一个这样的声明都会导致创建新的子类,代码也会稍微冗长一些,可读性也会稍差一些,但是第二个习惯用法在Scala book的整个编程过程中被多次使用。与直接字段相比有什么优势?一个简单的用例是traits,它不能有构造函数参数。再加上Jean所说的,你可以有类似于trait HillBi

考虑这两个类以及创建实例的方式:

class Person1(val name: String)

val p1 = new Person1("John");
以及:


为什么人们更喜欢后者(
Person2
)版本?每一个这样的声明都会导致创建新的子类,代码也会稍微冗长一些,可读性也会稍差一些,但是第二个习惯用法在Scala book的整个编程过程中被多次使用。与直接字段相比有什么优势?

一个简单的用例是traits,它不能有构造函数参数。

再加上Jean所说的,你可以有类似于trait HillBilly{val name=“Billy Bob”}的东西,并创建类似于
val p2=newperson2和HillBilly
abstract class Person2 {
  val name: String
}

val p2 = new Person2 {
  val name = "John"
}