Тип F # для объединения 1D и 2D массива - PullRequest
0 голосов
/ 29 мая 2011

Могу ли я иметь класс с одним членом, будь то массив с плавающей точкой или массив с массивом с плавающей точкой, например

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, чтобы повторить методы типа array, такие как .Item и т. Д. В качестве альтернативы, Как определить type Value, унаследованный от 'a[] но ограничить тип элемента 'a только float или float[]?

1 Ответ

1 голос
/ 29 мая 2011

Я не совсем уверен, зачем вам это нужно, но вы можете определить класс 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)

Использование массива массивов всегда, но только с одним элементом для одномерного сценария, как предложено Гейбом в комментарии, звучит как хорошая и более простая альтернатива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...