使用標準化單元型別來保持相容性

例如,SI 單位的型別已在 ti#1 中的 F#核心庫中標準化。開啟相應的子名稱空間 UnitNamesUnitSymbols,以使用它們。或者,如果只需要幾個 SI 單位,則可以使用型別別名匯入它們:

/// Seconds, the SI unit of time. Type abbreviation for the Microsoft standardized type.
type [<Measure>] s = Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols.s

有些使用者傾向於執行以下操作,只要定義已經可用,就不應該這樣做

/// Seconds, the SI unit of time
type [<Measure>] s // DO NOT DO THIS! THIS IS AN EXAMPLE TO EXPLAIN A PROBLEM.

當與引用標準 SI 型別的其他程式碼介面時,差異變得明顯。引用標準單元的程式碼是相容的,而定義自己型別的程式碼與不使用其特定定義的任何程式碼不相容。

因此,始終使用 SI 單位的標準型別。你是否參考 UnitNamesUnitSymbols 並不重要,因為這兩個中的等同名稱指的是相同的型別:

open Microsoft.FSharp.Data.UnitSystems.SI

/// This is valid, since both versions refer to the same authoritative type.
let validSubtraction = 1.<UnitSymbols.s> - 0.5<UnitNames.second>