2017-02-23 315 views
0

我几乎读过互联网上不可变/可变变量的每一个定义,但作为一个初学者,我只是不完全掌握它,所以我想知道是否有人能真正用通俗的话来解释它。不可变和可变变量的区别是什么?

任何编程语言中的不可变变量(或对象)都是我理解的,当它在赋值之后无法更改该变量的值时。例如,我现在用的是Haskell的编程语言,和我写的:

let x = 5 

由于Haskell有不可改变的变量,X绝不能有任何其他值大于5所以,如果我这一行代码写后:

x = 2 

我实际上并没有改变x的值,而是用相同的名字创建了一个新的变量,现在我调用x时会引用这个变量,所以在两行代码之后我只能达到x的值为2.

但是什么是一个可变变量然后什么p程序语言有它吗?这是对我来说很雾的地方。因为当人们说可变变量时,它们显然指的是一个变量或对象,其值可能确实在它被分配了一个初始值后发生了变化。

这是否意味着,如果你有一个可变变量你实际上操纵,在计算机内存地方是可变的,在不变的变量的情况下,你不能操纵计算机内存或什么地方?

我不知道如何进一步解释我的问题,正如我所说,我知道mutable =可以在初始值赋值后更改变量的值,immutable =不能。我得到了定义。但我不明白它在“幕后”发生了什么。我想我正在寻找关于实际可变变量的简单例子。

回答

0

这有什么好做不变性

let x = 5 
x = 2 

这是再分配绝对哈斯克尔不允许


首先让我们来看看一个普通let分配

Prelude> let x = 5 in x 
5 
it :: Num a => a 

你可以b IND x使用let,并重新绑定嵌套let一个x - 这实际上阴影x

Prelude> let x = 5 in let x = 2 in x 
2 
it :: Num a => a 

还记得let基本上是一个lambda

Prelude> (\x -> x) 5 
5 
it :: Num a => a 

过程中和lambda可以返回一个lambda;说明阴影谷歌

Prelude> (\x -> (\x -> x)) 5 2 
2 
it :: Num a => a 
相关问题