Spec-Zone.ru › OCaml 5.0

11.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 ) }

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

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

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/names.html

Spec-Zone.ru

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