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

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

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 для элементов моего массива, потому что я хочу, чтобы некоторые места были пустыми. Это разумно?

person Heisenbug    schedule 03.12.2011    source источник


Ответы (3)


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

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)
person Ankur    schedule 03.12.2011
comment
хорошо, спасибо .. я понимаю, что мне не нужно указывать это, но что, если я захочу? Какой должен быть синтаксис? Поскольку мне нужно поместить возвращаемый массив в изменяемое поле другого типа, я должен знать, как объявить такое поле. - person Heisenbug; 03.12.2011

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

> Array2D.create;;
val it : (int -> int -> 'a -> 'a [,]) = <fun:clo@4>
person J D    schedule 03.12.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)
person BLUEPIXY    schedule 03.12.2011