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