OCaml:参考细胞,Some,None

时间:2013-10-08 02:18:13

标签: ocaml

我正在阅读Jason的书,并面对以下代码。

    let x = ref None;;
    let one_shot y =
        match !x with
            None ->
                x := Some y;
                y
          | Some z -> z;;

我不明白Some和None的含义。

3 个答案:

答案 0 :(得分:2)

None类似未设置 null 。如果值与None匹配,则不会设置此值。

Some类似于设置了非空。如果值与Some z匹配,则此值的值为z

此处,函数one_shot看起来!x(地址x中的变量)。如果其None然后设置为y并返回y,如果是Some z则返回z

答案 1 :(得分:1)

它们是内置OCaml数据类型的构造函数,您可以自己定义:

type 'a option =
  | None
  | Some of 'a

这意味着None 'a option类型'a适用于任何Some 3,例如,int option为{{1}}。

答案 2 :(得分:1)

这些是内置选项类型的构造函数,定义如下:

type 'a option = None | Some of 'a

这是表示可选值的通常有用的和类型,在问题中显示的示例中使用。

值得注意的是,它是一个内置类型(而不是Pervasives模块中提供的),因为它用于推断带有可选参数的函数类型。

例如,请考虑以下事项:

let f ?x () =
  match x with
  | Some x -> x
  | None -> 0

此功能具有以下类型:

val f: ?x:int -> unit -> int