Ruby Users' Guide - クラス定数

前 - コピー - 次 - 目次

### クラス定数

次は定数だ．定数は大文字のアルファベットで始まる名前で指定さ れる．定数は代入によって定義される．未初期化の定数のアクセス や既に定義された定数への代入はエラーになる．

     ruby> FOO
     ERR: Uninitialized constant FOO
     ruby> FOO = 5
     5
     ruby> FOO
     5
     ruby> FOO = 5
     ERR: already initialized constnant FOO

定数はクラス/モジュールスコープで参照できる．別な言い方をす れば，クラスやモジュールの定義の範囲中ではそのクラス(または 親クラスやincludeされているモジュール)に所属する定数が参照で きる．クラスやモジュールの定義の外ではObjectクラスの定数が参 照できる．

     ruby> module ConstTest
     ruby|   CONST1 = 1
     ruby|   CONST2 = 3
     ruby|   CONST3 = 5
     ruby|   print CONST1, CONST2, CONST3, "\n"
     ruby|   def const_test
     ruby|     print CONST3, CONST2, CONST1, "\n"
     ruby|   end
     ruby| end
     135
     nil
     ruby> include ConstTest # includeすれば定数を参照できる
     Object
     ruby> CONST1
     1
     ruby> CONST1 = 9        # 先祖の定数は再定義できる(しない方が良い)
     9
     ruby> const_test        # しかし，先祖の定数には影響しない
     531

あるクラスで定義された定数は`::'演算子を使って参照できる．

     ruby> ConstTest::CONST1
     1

しかし，`::'演算子を使った代入はできない

     ruby> ConstTest::CONST1 = 7
     ERR: compile error in eval():
     eval.rb:33: parse error
     ConstTest::CONST1 = 7
                       ^

それと`::'演算子ではそのクラスまたはモジュールで定義された定 数しか，参照できない．上の例ではConstTestモジュールに対して `::'を使うと定数，CONST1，CONST2，CONST3は参照できるが， ConstTestをincludeしたクラスであるObjectに対して`::'でCONST2， CONST3をアクセスできない(CONST1は再定義しているので参照でき るのだが)．

前 - コピー - 次 - 目次