如何在F#中創建泛型類,約束條件是類型是度量?具有度量約束的泛型類
我已經試過,但A2和B2不產生錯誤:
open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames
type Vector2D_A<[<Measure>] 'u>(x : float<'u>, y : float<'u>) =
member this.X = x
member this.Y = y
type Vector2D_B<'t, [<Measure>] 'u>(x : 't, y : 't) =
member this.X = x
member this.Y = y
type Vector2D_C<'t>(x : 't, y : 't) =
member this.X = x
member this.Y = y
let a1 = Vector2D_A(1.0<metre>, 2.0<metre>)
let b1 = Vector2D_A(1.0<metre>, 2.0<metre>)
let c1 = Vector2D_C(1.0<metre>, 2.0<metre>)
let a2 = Vector2D_A(1.0, 2.0) // should produce an error
let b2 = Vector2D_A(1.0, 2.0) // should produce an error
let c2 = Vector2D_C(1.0, 2.0)
我想定義就像任何的這三個例子類(但不進行編譯):
1)
type Vector2D_B<'t, [<Measure>] 'u>(x : 't<'u>, y : 't<'u>) =
member this.X = x
member this.Y = y
2)
type Vector2D_B<'t when 't :> 't<[<Measure>]>>(x : 't<'u>, y : 't<'u>) =
member this.X = x
member this.Y = y
3)
type Vector2D_B<'t when 't :> 't<_>(x : 't<'u>, y : 't<'u>) =
member this.X = x
member this.Y = y