Exception 如何在Ocaml的float类型中表示空值

Exception 如何在Ocaml的float类型中表示空值,exception,null,pattern-matching,ocaml,Exception,Null,Pattern Matching,Ocaml,我知道这看起来很基本,但基本上,我想说的是模式匹配 match value with Null-> failwith "Empty" |value-> #do something 我尝试过null或none的任何变化,也尝试过unit,因为它的值是浮点,所以不能使用 我被难住了,任何帮助都将不胜感激正如delnan所说,OCaml中没有null。如果适合您的问题,您可以在模式匹配中使用如下选项: let your_function x = match x with

我知道这看起来很基本,但基本上,我想说的是模式匹配

match value with
  Null-> failwith "Empty"
 |value-> #do something
我尝试过null或none的任何变化,也尝试过unit,因为它的值是浮点,所以不能使用


我被难住了,任何帮助都将不胜感激

正如delnan所说,OCaml中没有
null
。如果适合您的问题,您可以在模式匹配中使用如下选项:

let your_function x = 
   match x with
    | None -> failwith "Empty"
    | Some f -> #do something

你不能。这是一个设计选择。许多语言允许任何值为null。这种方法的问题是,当程序员不期望值为空时,值为空,或者代码中必须检查每个输入值是否为空

OCaml采用的方法是,如果值可以为null,则必须显式地将其标记为null。这是通过选项类型完成的:

match value with
  | None -> failwith "Empty"
  | Some value -> (* do something *)
然而,如果直接将其替换到程序中,if将无法编译,因为OCaml将发现“值”实际上不能为null。无论创建什么,都需要更新以指示何时返回“null”值(无):

让safe_除以分子分母=
如果分母为0。然后
一些(分子/分母)
其他的
无(*除零*)

没有
Null
。有一种选项类型,可以是某一类型的
Some value
,也可以是
None
。通过一些教程,您是如何学习Ocaml的?您可能对
普及版感兴趣。如果您试图捕获NAN/INF或次正常值,请对浮点值进行分类。许多语言允许引用为空,但很少允许引用值(当然,没有像
选项
可空
)这样的包装器)。
let safe_divide numerator denominator =
  if denominator <> 0. then
    Some (numerator /. denominator)
  else
    None (* division by zero *)