为什么在伴随对象的应用方法中不允许使用 var/val 的字段声明

Why fields declaration with var/val not allowed in apply method of companion object

我正在使用 scala 2.12IntelliJ IDE。我尝试使用现成的模板在 Scala 伴随对象中自动生成 apply 方法。它生成了具有 val 字段的 apply 方法,因为我创建了 class 并在主构造函数中将字段声明为 val

请参考下面的代码片段了解模式详情或check it here :

class Name(val firstName : String,val lastName : String)

object Name {
  def apply(val firstName: String,val lastName: String): Name =
    new Name(firstName,lastName)
}

我遇到编译错误:需要标识符但找到了 val

为什么 Scala 编译器在 apply 方法的字段上使用 varval 时会在这里产生错误?此限制背后的重要概念是什么?

因为这是 Scala 中定义方法的方式,所以不需要在方法参数前加上 valvar。正如 Luis 所说,方法参数始终是不可变的。

应该是:

def apply(firstName: String, lastName: String) = ???

我有点惊讶,但 IntelliJ IDEA 在这一点上愚弄了你并生成了错误的代码。