OCaml 类型推断
OCaml Type Inferencing
我刚开始学习 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 中的内置比较运算符具有以下类型签名:
'a -> 'a -> bool
。请注意,虽然参数类型是通用的 ('a
),但它们是相同的。因此,当您进行类似 x < 0
的比较时,编译器会发现第二个参数的类型是 int
,然后推断 x 的类型也必须是 int
。更改您的比较以使用浮点数,例如x < 0.
将对您的代码进行类型检查,但它不再适用于 int
输入。
我刚开始学习 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 中的内置比较运算符具有以下类型签名:
'a -> 'a -> bool
。请注意,虽然参数类型是通用的 ('a
),但它们是相同的。因此,当您进行类似 x < 0
的比较时,编译器会发现第二个参数的类型是 int
,然后推断 x 的类型也必须是 int
。更改您的比较以使用浮点数,例如x < 0.
将对您的代码进行类型检查,但它不再适用于 int
输入。