type floatType = float32
let a = 5.0
let b = float32 a // Works
let b' = floatType b // Does not work
是否可以转换为类型缩写?如何转换为类型缩写?
type floatType = float32
let a = 5.0
let b = float32 a // Works
let b' = floatType b // Does not work
是否可以转换为类型缩写?如何转换为类型缩写?
在编写float32 a
时,您正在使用函数Microsoft.FSharp.Core.Operators.float32
,该函数将显式转换为单位为单精度浮点数。
如果你想允许的floatType
类似的使用,你可以添加以下到您的定义:
let inline floatType a = float32 a
现在您的代码应工作。
是的,可以使用类型别名进行投射,但不是投射,这不是投射的语法。在你的例子中,你使用的是explicit conversion。
铸造是不同的东西,它“转换”,以超一流(上铸造)或子类(下铸造),看看你的示例的这一修改:
type floatType = float32
let a = box 5.0f
let b = a :?> float32
let b' = a :?> floatType
这示例是向下转换,正如您可以看到它与别名一起使用。
所以无法投射从float
到float32
,即使没有类型注释。
其实在这种情况下,你是**掩码**类型缩写'floatType'与函数类型'floatType'的新定义,返回'float32' – Petr
@Petr它没有比float32更掩盖,是吗?类型注释仍然有效,因为编译器将用途区分为类型。有两种定义后,'float32'可以工作,但'floatType'不会? – Vandroiy
是的,你是对的。我的错 – Petr