Scala中不可变值的可变字段

3

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

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

由于m被声明为一个变量(var),m是可变的(mutable)。然而,由于x被声明为一个值(value),它是不可变的(immutable)。那么x.m是可变还是不可变的呢?


7
x 是不可变的。这意味着 x 将始终保持对 MyClass 的同一“实例(instance)”的引用。该实例可能会发生变异,但它永远不会是一个不同的 MyClass 实例。 - jwvh
1个回答

5

x.m是可变类型。

以下代码是有效的:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

println(x.m)

x.m = 7
println(x.m)

val 持有一个不能被改变的变量,但在这种情况下它并不是常量。实际上,它可以有可变的内部字段(正如在这种情况下通过 var)。从概念上讲,value x 拥有对变量 x.m 的不可变 指针(即你不能改变 x.m 引用的容器),但整数本身(即容器内容)是可变的。

相关链接:Scala 中 var 和 val 定义的区别是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接