我知道这可能看起来非常基础,但基本上,我想在模式匹配中说
match value with
Null-> failwith "Empty"
|value-> #do something
我尝试了任何的 null 或 none 的变化,也尝试过 unit,但由于值是浮点数,因此无法使用。
我感到困惑,希望能得到任何帮助。
我知道这可能看起来非常基础,但基本上,我想在模式匹配中说
match value with
Null-> failwith "Empty"
|value-> #do something
我尝试了任何的 null 或 none 的变化,也尝试过 unit,但由于值是浮点数,因此无法使用。
我感到困惑,希望能得到任何帮助。
你不能这样做。这是一种设计选择。许多编程语言允许任何值为null。这种方法的问题在于,当程序员意料之外地获得null值时,或者代码必须检查每个输入值是否为null时,就会变得混乱不堪。
OCaml采用的方法是,如果一个值可以为null,那么必须显式地标记它。这是使用option类型完成的:
match value with
| None -> failwith "Empty"
| Some value -> (* do something *)
然而,如果你直接在程序中使用它作为替换,那么编译将会失败,因为OCaml会发现"value"实际上不能为null。无论什么时候创建这个值都需要更新,以指示返回一个"null"值(None):
let safe_divide numerator denominator =
if denominator <> 0. then
Some (numerator /. denominator)
else
None (* division by zero *)
option
或Nullable
这样的包装器)。 - user395760正如delnan所说,OCaml中没有null
。如果适用于您的问题,您可以使用类似于以下模式匹配中的选项:
let your_function x =
match x with
| None -> failwith "Empty"
| Some f -> #do something
空值
。有一个选项类型,可以是某种类型的一些值
或无
。你是通过一些教程来学习Ocaml吗? - user395760Pervasives.classify_float
感兴趣。 - nlucaroni