OCaml - Почему ссылка на массив по умолчанию - PullRequest
0 голосов
/ 23 февраля 2019

Я знаю, что в OCaml мы не можем изменить значение переменной по умолчанию.Например, мы не можем сделать следующее:

let a = 1;
a = 2; 

Чтобы сделать это, мы добавляем ключевое слово ref:

let a = ref 1; a := 2;

Но я не понимаю, чтонам не нужно делать это для Array.Мы можем изменить значение массива, даже если его тип не равен: ref 'a.Например, я могу сделать:

let a = Array.create 3 0; a.(1) <- 2;

Без каких-либо ошибок.

Так есть ли причина, по которой мы можем изменить значение массива без использования ссылки?

Кроме того, в чем разница между ref and mutable`?

Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Короче говоря, изменяемые поля идут первыми, перед ссылками.Действительно, ссылочный тип не является примитивным типом в OCaml.Он определяется как

type 'a myref = { mutable contents: 'a}
let ref x = { contents=x }
let (!) r = r.contents
let (:=) r x = r.contents <- x

(см. Также http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#1_References)

Таким образом, примитивный строительный блок для изменяемых значений в OCaml - это изменяемые поля, а не ссылки.Точно так же все поля массива являются изменяемыми.

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