第 12 章 语言扩展

17 内联记录

(在 OCaml 4.03 中引入)

  构造函数参数::= ...
 记录声明
 

和类型构造函数的参数现在可以使用与记录相同的语法来定义。允许可变和多态字段。支持 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
错误: 此表单不允许,因为内联记录的类型可能会逸出。