1

也许我在这里很愚蠢,所以我想问的更普遍的问题是如何在 OCaml 中声明对某个类型的空值的引用。通常我声明对自定义定义的空值的引用,例如,如果我有一个类型type point = Point of (int * int),我会声明这样的引用let a = ref (Point (0,0))。然而,这并不令人满意,因为我必须自己“想出”一个空值。此外,如果您查看标准库中的参考“堆栈”模块(http://caml.inria.fr/pub /docs/manual-ocaml/libref/Stack.html ),里面没有空值,这个怎么处理?

4

2 回答 2

2

如果你真的想要它,你可以这样做:

let sr = ref (Stack.create ())
let () = Stack.push 42 !sr

OCaml 的值限制并没有阻止它,它最初将具有类型 '_a Stack.t ref,直到你推入它。

但是你几乎不需要它,Stack 已经是可变的。

于 2015-05-04T19:54:52.537 回答
1

好吧,堆栈有一个空值,因为Stack.create ()会创建一个空堆栈。关于您的一般问题,通常None将其用作空值。当然,这会自动将您的价值提升为选项。但这是故意的,因为如果您创建一个空值,然后您将更新它,尽管引用没有类型保证,您将永远更新它。

例子

let p0 = ref None in
...
p0 := Some (Point (0,0));
...
于 2015-05-04T20:36:18.787 回答