F#键入以组合1D和2D阵列
我可以拥有一个成员为float数组或类似float数组的数组的类吗F#键入以组合1D和2D阵列,f#,F#,我可以拥有一个成员为float数组或类似float数组的数组的类吗 type testArr(data: float[],...) = member x.data = data member x.others = ... new( data: float[][],...) = ??? 我试图定义 type Value=Value1D of float[]| Value2D of float[],然后定义type testArr(data:Value,…),但是我需要为type V
type testArr(data: float[],...) =
member x.data = data
member x.others = ...
new( data: float[][],...) = ???
我试图定义
type Value=Value1D of float[]| Value2D of float[],
然后定义type testArr(data:Value,…)
,但是我需要为type Value
重写大量代码,以重复数组
类型方法,如.Item
等。或者,我如何定义从继承的类型值
[]
但将elment类型'a
限制为float
或float[]
仅?我不完全确定您为什么需要它,但您可以使用私有构造函数定义一个TestArr
类,并添加两个静态方法来创建这两种类型(float[]
和float[]
)您希望允许的:
type TestArr<'T> private(data:'T[]) =
member x.Data = data
member x.Others = 42
static member Array1D(data:float[]) = TestArr(data)
static member Array2D(data:float[][]) = TestArr(data)
键入testaris有什么原因不能总是使用float[][]
并在1D场景中使用Value2D[0]
吗?我在上面用let x=[[1.0;2.0 |];让y=new TestArr(x)进行了测试“错误”方法或对象构造函数“TESTARR <代码> 1”未找到< /代码>。谢谢。托马斯解决方案建议私人构造函数,因此您不能做新的TESTARR……相反,您需要使用ARRAY1D方法作为1D数组的示例用例。还确定这2种方法(ARRAY1D和ARARY2D)是静态的,这似乎在Tomas代码中丢失了。@Ankur-感谢您的更正-是的,最后两个方法应该是静态的,并且可以使用TestArr.Array1D(x)
或TestArr.Array2D(y)
创建对象(方法名称可以相同-例如Create
,也可以使用重载)。