我正在学习 OCaml,我对变量的不变性有点困惑。根据我正在读的书,变量是不可变的。到目前为止一切顺利,但到底为什么我可以这样做:
let foo = 42
let foo = 4242
我缺少什么?
我认为最好的解释方法是举个例子。考虑以下代码(在 OCaml REPL 中执行):
# let foo = 42;;
val foo : int = 42
# let return_foo () = foo;;
val return_foo : unit -> int = <fun>
# let foo = 24;;
val foo : int = 24
# return_foo ();;
- : int = 42
上面的代码执行以下操作:
- Binds
42
到名字foo
.
- 创建一个函数
return_foo ()
返回绑定到的值foo
.
- Binds
24
到名字foo
(这隐藏了之前的绑定foo
).
- 调用
return_foo ()
函数,它返回42
.
将此与可变值的行为进行比较(使用ref
在 OCaml 中):
# let foo = ref 42;;
val foo : int ref = {contents = 42}
# let return_foo () = !foo;;
val return_foo : unit -> int = <fun>
# foo := 24;;
- : unit = ()
# return_foo ();;
- : int = 24
which:
- 创建一个可变引用,其中包含
42
并将其绑定到名称foo
.
- 创建一个函数
return_foo ()
返回存储在绑定到的引用中的值foo
.
- Stores
24
在参考文献中绑定到foo
.
- 调用
return_foo ()
函数,它返回24
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)