【问题标题】:How do I represent an null value in type float for Ocaml如何在 Ocaml 的浮点类型中表示空值
【发布时间】:2011-02-16 18:25:43
【问题描述】:

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

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

我尝试了 null 或 none 的任何变体,还尝试了由于 value 是浮点数而无法使用的 unit。

我很困惑,任何帮助将不胜感激

【问题讨论】:

  • 没有Null。有一个选项类型可以是某种类型的Some valueNone。您如何通过一些教程学习 Ocaml?
  • 如果您尝试捕获 NAN/INF 或低于正常值的值,您可能会对 Pervasives.classify_float 感兴趣。

标签: exception null pattern-matching ocaml


【解决方案1】:

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

OCaml 采用的方法是,如果一个值可能为空,那么它必须被显式标记为空值。这是通过选项类型完成的:

match value with
  | None -> failwith "Empty"
  | Some value -> (* do something *)

但是,如果您将其直接替换到程序中,if 将无法编译,因为 OCaml 会发现“值”实际上不能为空。无论正在创建什么都需要更新以指示它何时返回“空”值(无):

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多