【问题标题】:OCaml Type InferencingOCaml 类型推断
【发布时间】:2021-05-02 05:32:36
【问题描述】:

我刚开始学习 OCaml,我对 OCaml 编译器如何在参数可能是多种类型的某些情况下确定参数的输入类型感到困惑。我假设我需要在这些实例中明确说明类型?例如:

let sign x =
    if x > 0 then 1
    else if x < 0 then -1
    else 0

let _ = print_int(sign 1.5)

抛出 “错误:此表达式的类型为 float,但表达式应为 int 类型”

但是比较运算符不也适用于浮点数吗?为什么编译器假定参数应该是一个 int 而不是说参数类型是不明确的(除非我弄错了并且类型实际上并不模糊)?

【问题讨论】:

    标签: ocaml type-inference


    【解决方案1】:

    OCaml 中内置的比较运算符具有以下类型签名: 'a -&gt; 'a -&gt; bool。请注意,虽然参数类型是通用的 ('a),但它们都是相同的。因此,当您进行x &lt; 0 这样的比较时,编译器会看到第二个参数的类型是int,然后推断x 的类型也必须是int。将比较更改为使用浮点数,例如x &lt; 0. 将对您的代码进行类型检查,但随后它将不再适用于 int 输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多