Ruby

Ruby 定数

定数は先頭文字が大文字のものである。
ただし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)