2015-12-21 64 views

回答

2

在编写float32 a时,您正在使用函数Microsoft.FSharp.Core.Operators.float32,该函数将显式转换为单位为单精度浮点数。

如果你想允许的floatType类似的使用,你可以添加以下到您的定义:

let inline floatType a = float32 a 

现在您的代码应工作。

+0

其实在这种情况下,你是**掩码**类型缩写'floatType'与函数类型'floatType'的新定义,返回'float32' – Petr

+0

@Petr它没有比float32更掩盖,是吗?类型注释仍然有效,因为编译器将用途区分为类型。有两种定义后,'float32'可以工作,但'floatType'不会? – Vandroiy

+0

是的,你是对的。我的错 – Petr

4

是的,可以使用类型别名进行投射,但不是投射,这不是投射的语法。在你的例子中,你使用的是explicit conversion

铸造是不同的东西,它“转换”,以超一流(上铸造)或子类(下铸造),看看你的示例的这一修改:

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

这示例是向下转换,正如您可以看到它与别名一起使用。

所以无法投射从floatfloat32,即使没有类型注释。

相关问题