- コピー - - 目次

クラス定数


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


 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は再定義しているので参照でき るのだが).


- コピー - - 目次