書き換え可能なレコードの特殊な場合で,フィールド1つだけを持つ場合を伝統的に参照(reference)という。参照には特別な書き方がある。
まず,参照の生成には ref 関数。
# let p = ref 4;; val p : int ref = {contents = 4}
ref は初期値を引数にとって,参照を返す。ref は多相的な関数なので引数の型は何でもいい。
# let s = ref "foo";; val s : string ref = {contents = "foo"}
int ref とか string ref が参照の型。
参照の値を取り出すには前置演算子 ! を使う。
# !p;; - : int = 4 # !s;; - : string = "foo"
参照の書き換えは代入(assignment)と呼ぶことが多い。:= 演算子を使う。
# p := 7;; - : unit = () # p;; - : int ref = {contents = 7}
参照は型が決まっているので,違う型の値は代入できない。
# s := 77;; Characters 5-7: s := 77;; ^^ This expression has type int but is here used with type string