什么是“不可变变量”在函数式编程中意味着什么

时间:2013-03-27 07:31:37

标签: functional-programming immutability

我是函数式编程的新手,我真的无法理解“不可变”的概念 例如,在SML中:

val a = 3
val a = a+1

根据SML的原则,最后一行不会“改变”变量a的值,但是现在等于4, 有人可以帮我解释一下吗?什么是“无突变”的好处?

1 个答案:

答案 0 :(得分:6)

当我们说变量是不可变的时,我们的意思是它自己的值不能改变。

你在那里展示的是什么
val a = 3
val a = a+1

是:a的新值只是“遮蔽”a的旧值。 a只是绑定到3的名称,而在第二行中,它绑定到4a的旧值仍然存在,它只是无法访问。

如果您使用某种数据结构,可以更明显地看到这一点。没有像许多其他语言中看到的变异方法。例如,如果您有一个列表val L = [1,2,3],则无法更改L中的第一个值。您必须完全隐藏L,并创建一个新列表以遮蔽旧列表。

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