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

Jac*_*cob 5 null ocaml exception pattern-matching

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

match value with
  Null-> failwith "Empty"
 |value-> #do something
Run Code Online (Sandbox Code Playgroud)

我尝试过null或none的任何变化,并且还尝试过无法使用的单位,因为value是float.

我很难过,任何帮助都会受到赞赏

小智 11

你不能.这是一个设计选择.许多语言允许任何值为null.这种方法的问题在于,当程序员不期望它时,值为空,或者必须使用对每个空值的输入值的检查来填充代码.

OCaml采用的方法是,如果值可以为null,则必须明确标记为此类.这是通过选项类型完成的:

match value with
  | None -> failwith "Empty"
  | Some value -> (* do something *)
Run Code Online (Sandbox Code Playgroud)

但是,如果将其直接替换为程序,则无法编译,因为OCaml会发现"值"实际上不能为空.无论创建什么都需要更新,以指示何时返回"null"值(无):

let safe_divide numerator denominator =
  if denominator <> 0. then
    Some (numerator /. denominator)
  else
    None (* division by zero *)
Run Code Online (Sandbox Code Playgroud)

  • 许多语言允许*引用*为空,但很少,如果有的话,*值*(当然,没有像`option`或`Nullable`这样的包装器). (2认同)