我已经阅读了互联网上几乎所有不可变/可变变量的定义,但作为一个初学者,我只是没有完全掌握它,所以我想知道是否有人可以用外行术语来解释它。
任何编程语言中的不可变变量(或对象)都是我理解的,当您在赋值后不能更改该变量的值时。例如,我正在使用Haskell编程语言,我写道:
let x = 5
由于Haskell具有不可变变量,因此x永远不会具有除5之外的任何其他值。因此,如果我在该行代码之后写入:
x = 2
我实际上没有更改x的值但是创建了一个具有相同名称的新变量,现在它将是我调用x时引用的变量,因此在两行代码后我只能到达x值2。
但那么什么是可变变量,以及编程语言有哪些呢?这是我迷雾的地方。因为当人们说变量变量时,他们显然是指一个变量或对象,你可以确定的值在被赋予初始值后确实会发生变化。
这是否意味着如果你有一个可变变量,你实际操作该变量的计算机内存中的那个位置,并且在不可变变量的情况下,你无法操纵计算机内存中的那个位置或者什么?
我不知道如何进一步解释我的问题,正如我所说,我明白mutable =可以在初始值赋值后改变变量值,immutable =不能。我明白了。但我不明白它在“幕后”发生的事情上究竟意味着什么。我想我正在寻找关于实际可变变量的简单示例。
答案 0 :(得分:0)
这与不变性无关
let x = 5
x = 2
这是重新分配,绝对不允许在Haskell中
首先让我们看看常规let
作业
Prelude> let x = 5 in x
5
it :: Num a => a
您可以使用x
绑定let
,并在嵌套x
中重新绑定新 let
- 这有效阴影< / em>外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;说明影子agian
Prelude> (\x -> (\x -> x)) 5 2
2
it :: Num a => a