我正在阅读Jason的书,并面对以下代码。
let x = ref None;;
let one_shot y =
match !x with
None ->
x := Some y;
y
| Some z -> z;;
我不明白Some和None的含义。
答案 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