在 f# 中,操作“+”的函数签名是
5+6 //int->int->int
Run Code Online (Sandbox Code Playgroud)
但是当我编写如下代码时,它正在工作
6.0 + 3.0 //float->float->float
Run Code Online (Sandbox Code Playgroud)
OCaml 中的“+”与“+”不同。
5 + 5 //int->int->int
5.0 +. 5.0 // float->float->float
Run Code Online (Sandbox Code Playgroud)
它比 f# 更完美和限制,为什么 f# 做这个不完美的类型签名?为什么 f# 不支持“+.”?
对 f# 的功能感到困惑:(
与 OCAML 不同,F# 允许通过使用称为静态解析类型参数的功能进行泛型算术,该功能类似于 Haskell 类型类。
该+运营商可以在任何类型的定义中使用+的操作,它是专门用于各种.NET元,你可以在代码中看到了+ 这里。这意味着您可以为自定义类型开发一种算法,并在没有您自己的自定义运算符的情况下使其“正常工作”。
您可以在The Early History of F# 中了解导致这种变化的历史,第二篇标题为“F# 1.0 – 改进功能核心:重载算术”。