scala – 当我调用一个返回持有所述变量的case类实例的方法时,变量赋值会发生什么?

在我最近与一家信誉良好的软件公司进行的一次采访中,我被绊倒,试图为一个看似微不足道的Scala问题提供有效的解释.考虑以下:

case class Person(var age: Int)
def person = new Person(10)
person.age = 3
println(person)

这是println语句返回的内容:

Person(10)

问题是为什么这个以及当我将3分配给person.age时会发生什么?

最佳答案
好,

def person = new Person(10)

是一个功能.也就是说,每次调用person时,都会创建一个Person的新实例.因此,如果我们内联函数,您的代码将如下所示:

Person(10).age = 3
println(Person(10))

如果要更改首先创建的人员实例的年龄,则需要捕获该实例.

val p = person
p.age = 3
println(p)

转载注明原文:scala – 当我调用一个返回持有所述变量的case类实例的方法时,变量赋值会发生什么? - 代码日志