Scala中不可变值的可变字段

时间:2019-04-01 05:36:51

标签: scala immutability

考虑一个简单的类和一个(不可变的)值实例:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

由于m被声明为变量var),因此m可变。但是,由于x被声明为,因此它是不可变。那么x.m是可变的还是不可变的?

1 个答案:

答案 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?

相关问题