[루비 사용자 가이드] 클래스 상수
루비/레일스 프로그래밍/루비 사용자 가이드 2009.02.06 10:40상수는 대문자로 이름이 시작합니다. 상수에는 최대 한 번만 값을 대입해야만 합니다. 현재의 루비 구현에서 상수에 두번 이상 대입하면 에러가 발생하지 않고 경고 메시지가 표시됩니다.
30
ruby>fluid=31
31
ruby>Solid=32
32
ruby>Solid=33
(eval):1: warning: already initialized constant Solid
33
상수는 클래스 내부에서 정의될 수도 있습니다. 이 경우 인스턴스 변수와 달리 클래스 밖에서도 억세스 할 수 있습니다.
| C1=101
| C2=102
| C3=103
| def show
| puts "#{C1} #{C2} #{C3}"
| end
| end
nil
ruby> C1
ERR: (eval):1: uninitialized constant C1
ruby> ConstClass::C1
101
ruby> ConstClass.new.show
101 102 103
nil
상수는 모듈 안에서 정의될 수도 있습니다.
| C1=101
| C2=102
| C3=103
| def showConstants
| puts "#{C1} #{C2} #{C3}"
| end
| end
nil
ruby> C1
ERR: (eval):1: uninitialized constant C1
ruby> include ConstModule
Object
ruby> C1
101
ruby> showConstants
101 102 103
nil
ruby> C1=99 # not really a good idea
99
ruby> C1
99
ruby> ConstModule::C1
101
ruby> ConstModule::C1=99 # .. this was not allowed in earlier versions
(eval):1: warning: already initialized constant C1
99
ruby> ConstModule::C1 # "enough rope to shoot yourself in the foot"
99