我正在编写一个交换两个引用调用内容的函数。
let swap (x : a ref) (y :'a ref) : unit =
其中
type 'a ref = {mutable contents : 'a}
我不知道采取什么方法来解决这个问题。我是否使用模式匹配?
这是我的测试用例
let test () : bool =
let r1 = { contents = 5 } in
let r2 = { contents = 6 } in
let _ = swap r1 r2 in
((6,5) = (r1.contents,r2.contents))
;; run_test "Swap different" test
答案 0 :(得分:3)
这有用吗?
let swap x y =
let z = !x in
x := !y;
y := z
请注意,:=
和!
只是正常的函数,如下所示:
let (:=) r x = r.contents <- x
let (!) {contents} = contents
如果您想使用自己的类型定义,那么您可以这样做:
let swap' x y =
let z = x.contents in
x.contents <- y.contents;
y.contents <- z
最后,如果您正在使用电池,那么您可以使用此处定义的BatRef.swap
:http://ocaml-batteries-team.github.com/batteries-included/hdoc2/BatRef.html