6.3 名前

6.3.1. オブジェクトに名前をつける
6.3.2. 名前のついたオブジェクトを参照する

識別子はオブジェクトの名前で、その名前でオブジェクトにアクセスできます。

これら 11 の名前空間は文脈と識別子の大文字小文字(先頭の文字が小文字 — 以下である lowercase-ident mdash; か、大文字である — 以下capitalized-ident)で区別されます。ここではアンダースコアは小文字と見なされます。

6.3.1 オブジェクトに名前をつける

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
label-name ::= lowercase-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 バージョンとの移植性、互換性を考えると小文字は避けておいた方が無難です。

6.3.2 名前のついたオブジェクトを参照する

value-path ::= value-name
| module-path . value-name
constr ::= constr-name
| module-path . constr-name
typeconstr ::= typeconstr-name
| extended-module-path . typeconstr-name
field ::= field-name
| module-path . field-name
module-path ::= module-name
| module-path . module-name
extended-module-path ::= module-name
| extended-module-path . module-name
| extended-module-path ( extended-module-path )
modtype-path ::= modtype-name
| extended-module-path . modtype-name
class-path ::= class-name
| module-path . class-name

名前付きのオブジェクトはその名前で参照する (名前のための通常の静的なスコープルールによって) か、アクセスパス prefix.name によって参照できます。ここで prefix はモジュールを、 name はそのモジュールで定義されたオブジェクトを表します。 パスの最初の部分 prefix は単なるモジュール名か、アクセスパス name1.name2 ... となり、後者では名前を定義しているモジュールはそれ自身他のモジュールの中に入れ子なっていることになります。 型構成子やモジュール型を参照する場合、 prefix は 単純なファンクタ適用を含むことができます(上の構文クラス extended-module-path のように)。この場合、定義されているモジュールはファンクタ適用の結果です。

ラベル名、タグ名、メソッド名とインスタンス変数名は修飾する必要はありません。前3つはグローバルなラベルですし、後者はクラス内でローカルです。