我是函数式编程的新手,我不了解不变性的概念;例如一个不可变的变量。
例如,在标准 ML (SML) 中:
val a = 3
val a = a + 1
第二行不会“改变” variable 的值a
;但是,之后,a
等于4
。有人可以解释一下吗?
另外,“无突变”(不变性)有什么好处?
我是函数式编程的新手,我不了解不变性的概念;例如一个不可变的变量。
例如,在标准 ML (SML) 中:
val a = 3
val a = a + 1
第二行不会“改变” variable 的值a
;但是,之后,a
等于4
。有人可以解释一下吗?
另外,“无突变”(不变性)有什么好处?
当我们说一个变量是不可变的时,我们的意思是它自己的值不能改变。你在那里展示的东西
val a = 3
val a = a+1
是: 的新值a
只是简单地“遮盖”了 的旧值a
。a
只是一个绑定到 的名称,3
在第二行中,它绑定到4
. 的旧值a
仍然存在,只是无法访问。
如果您使用某种数据结构,则可以更明显地看到这一点。没有像您在许多其他语言中看到的那样的 mutator 方法。例如,如果您有一个 list val L = [1,2,3]
,则无法更改L
. 您将不得不L
完全遮蔽,并创建一个新列表来遮蔽旧列表。
因此,每次您绑定一个新的值声明时,它都会创建一个包含所有当前名称/值绑定的新环境。这些绑定都不能更改,它们只是被遮蔽了。