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

时间:2011-02-16 18:25:43

标签: exception null pattern-matching ocaml

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

中说
match value with
  Null-> failwith "Empty"
 |value-> #do something

我尝试过null或none的任何变化,并且还尝试过无法使用的单位,因为value是一个浮点数。

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

2 个答案:

答案 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