如何在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