2014-01-25 39 views
3

我與F#noobing周圍嘗試創建cos接受與單位角度過載。方法超載與計量單位

這是我的代碼:

[<Measure>] type rad 
[<Measure>] type deg 
let toRad(x:float<deg>) = 
    (float x) * 3.14159265/180.0 
    |> LanguagePrimitives.FloatWithMeasure<rad> 
let cos (angle: float<rad>) = cos(float angle) 
let cos (angle: float<deg>) = cos(toRad angle) // get duplicate definition of cos here 

編譯器抱怨最後一行COS的重複定義。

+0

和什麼問題(如果有的話)? –

回答

5

測量類型被擦除(請參閱specification),所以您實際上有兩個導致錯誤的定義cos(angle: float)

您可以爲這兩種可能性

type Angle = Degrees of float | Radians of float 

聯合類型或給功能不同的名稱。

+0

@JohanLarsson這是正確的答案。 –