Глава 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 Error: This form is not allowed as the type of the inlined record could escape.
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/inlinerecords.html