【发布时间】:2016-09-15 17:42:25
【问题描述】:
我一直认为float32 和single 类型可以互换,因为它们是类型别名。 float 和 double 也是如此。但是,它们似乎在 Microsoft.FSharp.Core.Operators 与 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
【问题讨论】:
-
System.Object.ReferenceEquals(typeof<single>,typeof<float32>);; System.Object.ReferenceEquals(typeof<double>,typeof<float>);; -
@PetSerAl:如果它们在引用上是相等的(你的建议是有道理的,而且它们确实是相等的),你如何解释它们在 UI 和程序集中不同位置的差异?或者这只是 F# 玩心机?
标签: f# double type-alias