定数は破壊可能

さっきRubyを書いていて引っ掛かったところをメモ。
Rubyでも定数を定義することが出来るのだけど、この定数は破壊的メソッドを使えば変更できてしまう。警告も例外も飛んでこない。

CONSTANT = "string"
a = CONSTANT

p [a, CONSTANT]  # => ["string", "string"]

CONSTANT.succ!
p [a, CONSTANT]  # => ["strinh", "strinh"]

a.succ!
p [a, CONSTANT]  # => ["strini", "strini"]

CONSTANT = "another string" # => test.rb:13: warning: already initialized constant CONSTANT

常識だったらごめんなさい。でもこれ、気を付けていないとまた引っ掛かりそうだ。