【发布时间】:2012-04-17 15:36:50
【问题描述】:
这可能是一个非常新手的问题,但我没有找到答案。 例如,我需要存储一个列表,然后在同一个指针下将其替换为另一个。
【问题讨论】:
标签: ocaml variable-assignment mutation
这可能是一个非常新手的问题,但我没有找到答案。 例如,我需要存储一个列表,然后在同一个指针下将其替换为另一个。
【问题讨论】:
标签: ocaml variable-assignment mutation
可以通过references:
let fact n =
let result = ref 1 in (* initialize an int ref *)
for i = 2 to n do
result := i * !result (* reassign an int ref *)
done;
!result
您不会经常看到引用,因为您可以在递归或高阶函数中使用不可变值来做同样的事情:
let fact n =
let rec loop i acc =
if i > n then acc
else loop (i+1) (i*acc) in
loop 2 1
首选无副作用的解决方案,因为它们更容易推理并且更容易确保正确性。
【讨论】:
ref 0 是一条记录{mutable contents: int},其中contents 由0 初始化,contents 可以稍后重新分配。