Reference Ocaml-空引用

Reference Ocaml-空引用,reference,ocaml,Reference,Ocaml,如何创建空引用?我的意思是像 let x = ref Null 或 或 ML中没有这样的东西。类型为t ref的值总是保存类型为t的值。这样,就避免了空指针异常的诅咒 如果您确实需要一个可为空的引用,那么您必须创建一个类型为t option ref的引用: let r : int option ref = ref None ... r := Some 5 然后,类型系统确保您不会忘记处理None情况,例如,使用匹配: match !r with | Some n -> ... | No

如何创建空引用?我的意思是像

let x = ref Null


ML中没有这样的东西。类型为
t ref
的值总是保存类型为
t
的值。这样,就避免了空指针异常的诅咒

如果您确实需要一个可为空的引用,那么您必须创建一个类型为
t option ref
的引用:

let r : int option ref = ref None
...
r := Some 5
然后,类型系统确保您不会忘记处理None情况,例如,使用匹配:

match !r with
| Some n -> ...
| None -> (* What now? *)

不过,你应该很少需要这样的东西。如果你发现自己想要一个选项参考,那么你应该首先尝试重新构造问题。

很难说清你在问什么。OCaml中没有预定义的名为
Null
。有一个名字叫
None
,实际上你可以说
让x=ref None
。您也可以说
让x=ref()
。然而,很难想象在什么情况下你会想这样做。由于
()
是其类型的唯一值,因此不能将
x
设置为任何其他值。因此,没有理由使用引用

下面是一个演示如何使用
ref None
的会话

# let x = ref None;;
val x : '_a option ref = {contents = None}
# x := Some 5;;
- : unit = ()
# x;;
- : int option ref = {contents = Some 5}
# x := None;;
- : unit = ()
# x;;
- : int option ref = {contents = None}
一般来说,像
int option
这样的选项类型允许您具有int值(比如
some5
)或无值(
None
)。使用像
int option ref
这样的引用可以为您提供一个可变值,您可以在这两者之间进行更改


在我看来,你在试图复制你在其他语言中使用的模式。如果可能的话,您应该尝试用自己的术语学习OCaml。

type tree=int*tree list*tree ref的节点,现在,我想创建示例树。我该怎么办?很难说,这个类型定义对我来说没有多大意义。它是从哪里来的?
match !r with
| Some n -> ...
| None -> (* What now? *)
# let x = ref None;;
val x : '_a option ref = {contents = None}
# x := Some 5;;
- : unit = ()
# x;;
- : int option ref = {contents = Some 5}
# x := None;;
- : unit = ()
# x;;
- : int option ref = {contents = None}