考虑一个简单的类和一个(不可变的)值实例:
class MyClass (var m: Int) {}
val x : MyClass = new MyClass(3)
由于m
被声明为变量(var
),因此m
是可变。但是,由于x
被声明为值,因此它是不可变。那么x.m
是可变的还是不可变的?
答案 0 :(得分:4)
x.m
是可变的。
以下代码有效:
class MyClass (var m: Int) {}
val x : MyClass = new MyClass(3)
println(x.m)
x.m = 7
println(x.m)
val 包含一个不能更改的变量,但是在这种情况下,它不能使其保持不变。实际上,它可以具有可变的内部字段(在这种情况下,通过 var )。从概念上讲, val ue x
拥有变量x.m
的不变 pointer (即,您不能更改容器x.m
所引用的),但整数本身(即容器的内容)是可变的。
相关:What is the difference between a var and val definition in Scala?