为什么在伴随对象的应用方法中不允许使用 var/val 的字段声明
Why fields declaration with var/val not allowed in apply method of companion object
我正在使用 scala 2.12 和 IntelliJ 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 方法的字段上使用 var 或 val 时会在这里产生错误?此限制背后的重要概念是什么?
因为这是 Scala 中定义方法的方式,所以不需要在方法参数前加上 val
或 var
。正如 Luis 所说,方法参数始终是不可变的。
应该是:
def apply(firstName: String, lastName: String) = ???
我有点惊讶,但 IntelliJ IDEA 在这一点上愚弄了你并生成了错误的代码。
我正在使用 scala 2.12 和 IntelliJ 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 方法的字段上使用 var 或 val 时会在这里产生错误?此限制背后的重要概念是什么?
因为这是 Scala 中定义方法的方式,所以不需要在方法参数前加上 val
或 var
。正如 Luis 所说,方法参数始终是不可变的。
应该是:
def apply(firstName: String, lastName: String) = ???
我有点惊讶,但 IntelliJ IDEA 在这一点上愚弄了你并生成了错误的代码。