如何在 OCaml 中声明对空堆栈的引用?



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

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

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

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

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

好吧,stack 有一个空值,因为Stack.create ()将创建一个空堆栈。关于您的一般问题,那么通常None用作空值。当然,这会自动将您的价值提升到期权中。但这是有意为之的,因为如果您将值创建为空,然后您将通过引用进行更新,但没有类型保证,您将永远更新它。

let p0 = ref None in
...
p0 := Some (Point (0,0));
...

相关内容

  • 没有找到相关文章

最新更新