Typ*_*ats 2 ocaml copy reference
OCaml值通过引用传递,而不是通过值传递.当值恒定时,引用和值之间没有可观察到的差异.但是,当值是可变的时(例如具有可变字段的结构),我可能想要复制它,以便当一个变量改变该值时,另一个设置为前一个变量的变量也不会发生变异.我可以在OCaml中这样做吗?
恐怕没有自动简便的方法.您必须自己编写一些代码来复制值.例如,
type t = { x : int option; mutable y : int option }
let copy t = { t with x = t.x }
let () =
let t = { x = None; y = Some 1 } in
let t' = copy t in
t.y <- None;
assert (t'.y <> None) (* check t'.y is not shared *)
Run Code Online (Sandbox Code Playgroud)
还有copy原始可变类型的函数,例如Bytes.copy和Array.copy.
如果您的值是嵌套的,那么您的复制功能可能会也可能不会复制内部值.
有一个神奇的函数Obj.dup可以创建一个参数的深层副本,但我相信你不会想要使用它,因为它会递归复制所有的值节点,包括不可变量,这对空间效率非常不利.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |