Spec-Zone.ru › OCaml
☰Язык программирования OCaml
  • Язык программирования OCaml
  • Расширения языка

Глава 12 Расширения языка

17 Встроенные записи

(Введено в OCaml 4.03)

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

Аргументы конструкторов типов-сумм теперь можно определять с использованием той же синтаксической конструкции, что и записи. Разрешены изменяемые и полиморфные поля. Поддерживается синтаксис GADTs. Атрибуты могут быть указаны для отдельных полей.

Синтаксически, создание или сопоставление конструкторов с таким встроенным аргументом-записью аналогично работе с униарным конструктором, единственный аргумент которого — объявленный тип записи. Шаблон может привязать встроенную запись как псевдо-значение, но запись не может выйти за пределы области действия привязки и может быть использована только с операцией точечной записи для извлечения или изменения полей, или для создания новых значений конструктора.

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.
« Синтаксис, специфичный для расширенийКомментарии к документации »
Авторские права © 2024 Institut National de Recherche en Informatique et en Automatique

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/inlinerecords.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API