Синтаксис объявления функции, возвращающей 2DArray в F # - PullRequest
1 голос
/ 03 декабря 2011

Мне нужно объявить функцию в F #, которая принимает 2 параметра (row, col) и вернуть 2-мерный массив Option (инициализируя все элементы как none), но я не знаю правильный синтаксис.Я пробовал что-то вроде:

type T = 
  {
   ....//my type
  }

let create2DArrayOfT (row : int , col: int) Array2D<Option<T>> = Array2D.init<Option<T>> 10 10 (fun -> None)

подпись выше неверна при указании типа возвращаемого значения.Итак, у меня есть 2 вопроса:

  1. Какая правильная подпись для указания типа возвращаемого значения в виде двумерного массива?
  2. Я пытался использовать Option для элементов моего массивапотому что я хочу, чтобы некоторые места были пустыми.Это разумно?

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

Тип двумерного массива записывается 'a [,] на F #. В следующий раз вы можете узнать это с помощью интерактивной F #, посмотрев на тип функций в модуле Array2D:

> Array2D.create;;
val it : (int -> int -> 'a -> 'a [,]) = <fun:clo@4>
3 голосов
/ 03 декабря 2011

Вам не нужно указывать тип возвращаемого значения, поскольку оно будет выведено из вывода типа.Просто используйте:

type T = {Name : string}
let create2DArrayOfT (row : int , col: int) = Array2D.init<Option<T>> 10 10 (fun _ _ -> None)

ОБНОВЛЕНИЕ:

Если вы хотите указать тип возврата, используйте:

let create2DArrayOfT (row : int , col: int) : Option<T> [,] = Array2D.init<Option<T>> 10 10 (fun _ _ -> None)
1 голос
/ 04 декабря 2011
let create2DArrayOfT<'T> (row : int , col: int) : 'T option [,] = Array2D.init<'T option> row col (fun _ _ -> None)

Пропуск аннотации

let create2DArrayOfT<'T> (row, col) = Array2D.init<'T option> row col (fun _ _ ->None)

использование:

let a = create2DArrayOfT<T>(2,3)
...