第 12 章 語言擴展

17 行內記錄

(在 OCaml 4.03 中引入)

  constr-args::= ...
 record-decl
 

總和型別建構子的參數現在可以使用與記錄相同的語法來定義。允許可變和多型欄位。支援 GADT 語法。可以為個別欄位指定屬性。

在語法上,使用此類行內記錄參數建構或匹配建構子,與使用唯一的參數是宣告的記錄型別的一元建構子類似。模式可以將行內記錄綁定為偽值,但記錄不能逃脫綁定的作用域,只能使用點符號來提取或修改欄位,或建構新的建構子值。

type t = | Point of {width: int; mutable x: float; mutable y: float} | Other let v = Point {width = 10; x = 0.; y = 0.} let scale l = function | Point p -> Point {p with x = l *. p.x; y = l *. p.y} | Other -> Other let print = function | Point {x; y; _} -> Printf.printf "%f/%f" x y | Other -> () let reset = function | Point p -> p.x <- 0.; p.y <- 0. | Other -> ()
let invalid = function | Point p -> p
Error: 不允許這種形式,因為行內記錄的型別可能會逸出。