6.3 Names

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2008-11-01 (土) 10:53:01

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

  • 値の名前 (文法クラス value-name),
  • 値のコンストラクタ と 例外コンストラクタ (constr-name),
  • ラベル (label-name),
  • バリアントタグ (tag-name),
  • 型コンストラクタ (typeconstr-name),
  • レコードフィールド (field-name),
  • クラス名 (class-name),
  • メソッド名 (method-name),
  • インスタンス変数名 (inst-var-name),
  • モジュール名 (module-name),
  • モジュール型名 (modtype-name). これら 11の名前空間はコンテキストと識別子の文字 (先頭の文字が小文字 (以下で lowercase-ident と記される) であるか、大文字であるか (capitalized-ident)) で区別されます。ここではアンダースコアは小文字と見なされます。

Naming objects

          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                                 

As shown above, prefix and infix symbols as well as some keywords can be used as value names, provided they are written between parentheses. The capitalization rules are summarized in the table below. 以上のように、前置シンボルや中置シンボル、いくつかのキーワードは、括弧でくくることで値の名前として使えます。 大文字小文字で区別する規則は要約すると以下のようになります。

名前空間先頭文字の大文字小文字
小文字
コンストラクタ大文字
ラベル小文字
バリアントタグ大文字
例外大文字
型コンストラクタ小文字
レコードフィールド小文字
クラス小文字
インスタンス変数小文字
メソッド小文字
モジュール大文字
モジュール型どちらでも

バリアントタグに関する注意 現在の実装では大文字だけでなく小文字のバリアントタグも受理しますが、将来の OCaml バージョンとの移植性、互換性を考えると小文字は避けておいた方が無難です。

Referring to named objects

             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は単なるモジュール名か アクセスパス name_1 . name_2 ..., となり、後者では定義しているモジュールはそれ自身他のモジュールの中にネストされていることになります。 型コンストラクタやモジュール型を参照する場合、 prefixは 単純なファンクタ適用を含むことができます(上の構文クラスextended-module-pathのように)。この場合、定義されているモジュールはファンクタ適用の結果です。

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

新規 編集 添付