Spec-Zone.ru › OCaml 4.14

9.3 Имена

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

  • имена значений (синтаксический класс value-name),
  • конструкторы значений и конструкторы исключений (класс constr-name),
  • метки (label-name, определены в разделе 9.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/4.14/htmlman/names.html

Spec-Zone.ru

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