私がこれまで見てきたことから、可変フィールドを持つレコードは、あたかも参照によって渡されたかのように振る舞います。たとえば、レコードを関数に渡すか、データ構造に格納すると、レコードはそのプロセスでコピーされません。たとえば、このコード:変更可能なフィールドを持つレコードは、常に「参照渡し」ですか?
type t = {
mutable t_val: int
}
let() =
let ht = Hashtbl.create 16 in
let x = { t_val = 42 } in
Hashtbl.replace ht "x" x;
x.t_val <- 43;
let x2 = Hashtbl.find ht "x" in
Format.printf "x.t_val: %d, x2.t_val: %[email protected]" x.t_val x2.t_val
出力
x.t_val: 43, x2.t_val: 43
これは信頼性や行動を意図や状況に依存しますか?