2013-05-01 3 views
1

Я новичок в OCaml, и я пытаюсь понять концепцию mutable record field.ocaml - массив записей с изменяемым полем

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

type t = {i: int; mutable b: bool};; 

Я хочу, чтобы иметь возможность изменить значение «B» поле записи, так что я положил его mutable

let m = Array.make 10 ({i = 5; b = false});; 

Здесь я стараюсь установить поле записи, расположенной на первом индексе моего массива б:

(Array.get m 0).b <- true;; 

проблема в том хочу, чтобы я сделал это, он установит поле «b» всех записей массива, и это не то, что я хочу.

Имеет ли изменяемые поля одной записи одну и ту же память? Как я могу сделать, чтобы изменить значение поля «b» конкретной записи?

ответ

6

As the documentation states, Array.make создает массив, элементы которого все физически равны. Это не проблема, если эти элементы неизменяемы, но, как вы видели, вы должны учитывать это, если они изменяемы.

Что вы можете сделать, это использовать Array.init, чтобы создать другой объект для каждой клетки вашего массива:

let m = Array.init 10 (fun _ -> {i = 5; b = false});; 
Смежные вопросы