定数は先頭文字が大文字のものである。
ただしRubyの場合は値の変更が可能となっている。
定数の変更が可能
CONST = "定数です"
p CONST
CONST << " 追加"
p CONST
実行結果
"定数です"
"定数です 追加"
普通にできちゃう。
定数に対してfreeze
をつけることで変更を防げる。
定数の変更を不可
CONST = "定数です"
p CONST
CONST.freeze
CONST << " 追加"
p CONST
実行結果
"定数です"
in `<main>': can't modify frozen String (RuntimeError)
ただ再代入はできる模様
再代入はできちゃう
CONST = "定数です"
p CONST
CONST.freeze
CONST = "定数です 追加"
p CONST
実行結果
"定数です"
warning: already initialized constant CONST
warning: previous definition of CONST was here
"定数です 追加"
注意されるが再代入が行われる。
これを防ぐにはmoduleにして、moduleごとfreeze
を行う
再代入も防ぐ
module Teisuu
CONST = "定数です"
end
p Teisuu::CONST
Teisuu.freeze
Teisuu::CONST = "定数です 追加"
p Teisuu::CONST
実行結果
"定数です"
in `<main>': can't modify frozen Module (RuntimeError)