如何强制转换为类型缩写


type floatType = float32
let a = 5.0
let b = float32 a // Works
let b' = floatType b // Does not work

是否可以转换为类型缩写?

是的,可以使用类型别名进行强制转换,但你没有强制转换,这不是强制转换的语法。在您的示例中,您使用的是显式转换。

强制转换是另一回事,它"转换"为超类(向上转换(或子类(向下转换(,请参阅示例的修改:

type floatType = float32
let a = box 5.0f 
let b  = a :?> float32
let b' = a :?> floatType

此示例是向下转换的,如您所见,它适用于别名。

所以即使没有类型注释,也不可能从float转换为float32

在编写float32 a时,你正在使用函数 Microsoft.FSharp.Core.Operators.float32 ,它显式转换为没有单位的单精度浮点数。

如果要允许类似地使用 floatType ,则可以在定义中添加以下内容:

let inline floatType a = float32 a

现在你的代码应该可以工作了。

最新更新