5

我是函数式编程的新手,我不了解不变性的概念;例如一个不可变的变量。

例如,在标准 ML (SML) 中:

val a = 3
val a = a + 1

第二行不会“改变” variable 的值a;但是,之后,a等于4。有人可以解释一下吗?

另外,“无突变”(不变性)有什么好处?

4

1 回答 1

7

当我们说一个变量是不可变的时,我们的意思是它自己的值不能改变。你在那里展示的东西

val a = 3
val a = a+1

是: 的新值a只是简单地“遮盖”了 的旧值aa只是一个绑定到 的名称,3在第二行中,它绑定到4. 的旧值a仍然存在,只是无法访问。

如果您使用某种数据结构,则可以更明显地看到这一点。没有像您在许多其他语言中看到的那样的 mutator 方法。例如,如果您有一个 list val L = [1,2,3],则无法更改L. 您将不得不L完全遮蔽,并创建一个新列表来遮蔽旧列表。

因此,每次您绑定一个新的值声明时,它都会创建一个包含所有当前名称/值绑定的新环境。这些绑定都不能更改,它们只是被遮蔽了。

于 2013-12-10T21:37:52.970 回答