Как определить неинициализированный массив в OCaml?Неинициализированные массивы в OCaml
Я стараюсь сделать так:
let arr = Array.make_matrix 2 2
Error: The type of this expression, '_a -> '_a array array,
contains type variables that cannot be generalized
Конечно, я могу заполнить матрицу 0. Но тогда у меня есть проблемы с типом, потому что я хочу, чтобы хранить в этом входной и выходной массив каналов (IC и oc) двух разных пользователей:
let fd, _ = conn in
let ic = Lwt_io.of_fd Lwt_io.Input fd in
let oc = Lwt_io.of_fd Lwt_io.Output fd in
Пожалуйста, скажите, как я могу заполнить такой массив?
Попробуйте использовать ответы.
let ic1 = ref None
...
ic1 := ic;
Error: This expression has type Lwt_io.input Lwt_io.channel
but an expression was expected of type 'a option
let arr = Array.make_matrix 2 2 None
...
arr.(0).(0) <- ic;
Error: This expression has type Lwt_io.input Lwt_io.channel
but an expression was expected of type 'a option
Если это массив каналов, то при доступе к элементу вы должны получить канал. Какой канал вы получили бы при доступе к элементу такого неинициализированного массива? – newacct
Я уже написал правильный способ использования типов опций. Ваш код не совпадает. – camlspotter