我一直认为类型float32
和single
可以互换,因为它们是类型别名。 float
和double
也是如此。但是,它们似乎在不同的程序集Microsoft.FSharp.Core.Operators
vs Microsoft.FSharp.Core.ExtraTopLevelOperators
中声明。
此外,弹出式说明略有不同,F#在float32
和float
上表示可以使用字符串并在其上使用Parse()
。
但是,尝试使用single
和double
也可以成功:
let x = single "12.3"
let y = double "13.4"
我应该注意哪些差异?我总是互换地使用它们,从来没有真正考虑过它,直到我看到弹出窗口和签名中的差异:
// on hovering, or in FSI, this will have the slightly confusing signature:
// val x: a: double -> float
let x (a: double) = float a
答案 0 :(得分:3)
所有这些只是相应CLR类型的别名,如prim-types-prelude.fs
所示。
至于令人困惑的签名,请考虑一下:
type typA = A;;
type typB = typA;;
let f (x : typA) = (x : typB)
//val f : x:typA -> typB
似乎F#更喜欢在你(或其他一些定义)使用它们的地方使用别名。
最后,您引用的名称空间(FSharp.Core.Operators
)不是指float
类型,而是float
函数 (float : 'T -> float
)。请参阅prim-types.fs。