【发布时间】:2014-07-21 02:32:45
【问题描述】:
我经常听到“对不可变数据的可变引用”这个术语。就我而言,这是针对 Scala 的。 如果您有一个可变引用,这是否意味着不可变数据是可变的?我很难理解它的理论和实践方面。例子会很棒。
【问题讨论】:
标签: scala concurrency functional-programming immutability mutable
我经常听到“对不可变数据的可变引用”这个术语。就我而言,这是针对 Scala 的。 如果您有一个可变引用,这是否意味着不可变数据是可变的?我很难理解它的理论和实践方面。例子会很棒。
【问题讨论】:
标签: scala concurrency functional-programming immutability mutable
这意味着您可以更改引用(更改引用的内容)但不能更改数据(更改引用背后的内容)。一旦对数据有多个引用,这种差异就很重要,这种情况在 Scala 这样的语言中一直存在(赋值、参数传递、添加到集合等)。例如:
var x = List(1);
var y = x;
x = List(2);
// y.head == 1
// x.head == 2
请注意,这种区别甚至适用于 Java:
String x = "foo";
String y = x;
x = "bar";
// y.equals("foo")
// x.equals("bar")
请注意,在这两个示例中,我们改变了引用 x 和 y,但我们没有(事实上也不能)改变它们引用的对象。
【讨论】: