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

Глава 11 Язык OCaml

3 Имена

Идентификаторы используются для присвоения имён нескольким классам языковых объектов и последующей ссылки на эти объекты по имени:

  • имена значений (синтаксический класс value-name),
  • конструкторы значений и конструкторы исключений (класс constr-name),
  • метки (label-name, определены в разделе 11.1),
  • теги полиморфных вариантов (tag-name),
  • конструкторы типов (typeconstr-name),
  • поля записей (field-name),
  • имена классов (class-name),
  • имена методов (method-name),
  • имена переменных экземпляра (inst-var-name),
  • имена модулей (module-name),
  • имена типов модулей (modtype-name).

Эти одиннадцать пространств имён различаются как по контексту, так и по регистру идентификатора: первая буква идентификатора может быть строчной (ниже обозначается как lowercase-ident) или прописной (ниже обозначается как capitalized-ident). Для этой цели подчёркивание считается строчной буквой.

Именование объектов

value-name ::= lowercase-ident
∣ ( operator-name )
operator-name ::= prefix-symbol ∣ infix-op
infix-op ::= infix-symbol
∣ * ∣ + ∣ - ∣ -. ∣ = ∣ != ∣ < ∣ > ∣ or ∣ || ∣ & ∣ && ∣ :=
∣ mod ∣ land ∣ lor ∣ lxor ∣ lsl ∣ lsr ∣ asr
constr-name ::= capitalized-ident
tag-name ::= capitalized-ident
typeconstr-name ::= lowercase-ident
field-name ::= lowercase-ident
module-name ::= capitalized-ident
modtype-name ::= ident
class-name ::= lowercase-ident
inst-var-name ::= lowercase-ident
method-name ::= lowercase-ident

См. также следующее расширение языка: расширенные операторы индексирования.

Как показано выше, префиксные и инфиксные символы, а также некоторые ключевые слова можно использовать в качестве имён значений, если заключить их в круглые скобки. Правила регистра сведены в таблицу ниже.

Пространство имён Регистр первой буквы
Значения строчная буква
Конструкторы прописная буква
Метки строчная буква
Теги полиморфных вариантов прописная буква
Исключения прописная буква
Конструкторы типов строчная буква
Поля записей строчная буква
Классы строчная буква
Переменные экземпляра строчная буква
Методы строчная буква
Модули прописная буква
Типы модулей любой

Примечание о тегах полиморфных вариантов: текущая реализация допускает строчные теги вариантов наряду с тегами, начинающимися с прописной буквы, однако для обеспечения переносимости и совместимости с будущими версиями OCaml мы рекомендуем избегать строчных тегов вариантов.

Ссылки на именованные объекты

value-path ::= [ module-path . ] value-name
constr ::= [ module-path . ] constr-name
typeconstr ::= [ extended-module-path . ] typeconstr-name
field ::= [ module-path . ] field-name
modtype-path ::= [ extended-module-path . ] modtype-name
class-path ::= [ module-path . ] class-name
classtype-path ::= [ extended-module-path . ] class-name
module-path ::= module-name { . module-name }
extended-module-path ::= extended-module-name { . extended-module-name }
extended-module-name ::= module-name { ( extended-module-path ) }

Ссылка на именованный объект может задаваться либо его именем (согласно обычным правилам статической области видимости имён), либо путём доступа prefix . name, где prefix обозначает модуль, а name — имя объекта, определённого в этом модуле. Первый компонент пути, prefix, — это либо простое имя модуля, либо путь доступа name1 . name2 …, если определяющий модуль сам вложен в другие модули. При ссылке на конструкторы типов, типы модулей или типы классов prefix также может содержать простые применения функторов (как в приведённом выше синтаксическом классе extended-module-path), если определяющий модуль является результатом применения функтора.

Имена меток, имена тегов, имена методов и имена переменных экземпляра не требуют квалификации: первые три являются глобальными метками, а последние относятся к конкретному классу.

« ЗначенияВыражения типов »
Copyright © 2026 Institut National de Recherche en Informatique et en Automatique

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/names.html

Spec-Zone.ru

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