type Foo(size: int,data: 'T []) =
new(data: float []) =
Foo(sizeof<float>,data)
new(data: int []) =
Foo(sizeof<int>,data) //error: f# thinks that data is float []
member this.Size() = size
В принципе мне нужны несколько конструкторов с общим массивом «T [], и я забочусь только о размере« T.Общие конструкторы в F #
Я хочу, чтобы использовать его как это:
Foo([|1,2,3,4|]).Size() // prints size of int
Foo([|1.f,2.f,3.f,4.f|]).Size() // prints size of float
Как мне это сделать?
Update1:
Я просто понял, что я не могу позволить компилятору вывести размер, я должен сделать это вручную.
type Foo<'T>(size: int,data: 'T []) =
new(data: float []) =
Foo(4,data)
new(data: int []) =
Foo(16,data)
new(data: Vector3 []) =
Foo(Vector3.SizeInBytes,data)
member this.Size() = size
Возможно ли это?
Когда я Foo([|new Vector3(1.f,1.f,1.f)|]
Я хочу Foo, чтобы быть Foo<Vector3>
и, следовательно, данные должны быть данными типа: Vector3 []