我知道这看起来很基本,但基本上,我想在模式匹配
中说match value with
Null-> failwith "Empty"
|value-> #do something
我尝试过null或none的任何变化,并且还尝试过无法使用的单位,因为value是一个浮点数。
我很难过,任何帮助都会受到赞赏
答案 0 :(得分:11)
你做不到。这是一个设计选择。许多语言允许任何值为null。这种方法的问题在于,当程序员不期望它时,值为null,或者必须使用对每个空值的输入值的检查来填充代码。
OCaml采用的方法是,如果值可以为null,则必须明确标记为此类。这是通过选项类型完成的:
match value with
| None -> failwith "Empty"
| Some value -> (* do something *)
但是,如果将其直接替换为程序,则无法编译,因为OCaml会发现“值”实际上不能为空。无论创建什么都需要更新以指示它何时返回“空”值(无):
let safe_divide numerator denominator =
if denominator <> 0. then
Some (numerator /. denominator)
else
None (* division by zero *)
答案 1 :(得分:2)
正如德尔南所说,OCaml中没有null
。如果适合您的问题,您可以做的是使用模式匹配中的选项,如下所示:
let your_function x =
match x with
| None -> failwith "Empty"
| Some f -> #do something