如何在 OCaml 中声明对空堆栈的引用?
How to declare a reference to a empty stack in 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) 中使用 ''come up" with a empty value myself. Also, if you look at the reference ``Stack'' 模块,其中没有空值。你是怎么处理的?
如果你真的想要它,你可以这样做:
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));
...
也许我在这里很愚蠢,所以我想问的更笼统的问题是如何在 OCaml 中声明对某种类型的空值的引用。通常我会声明对自定义空值的引用,例如,如果我有一个类型 type point = Point of (int * int)
,我会声明这样的引用 let a = ref (Point (0,0))
。然而,这并不令人满意,因为我必须在标准库 (http://caml.inria.fr/pub/docs/manual-ocaml/libref/Stack.html) 中使用 ''come up" with a empty value myself. Also, if you look at the reference ``Stack'' 模块,其中没有空值。你是怎么处理的?
如果你真的想要它,你可以这样做:
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));
...