Rubyの「定数」は慣例により定数と呼ばれますが、実際には変更可能であることを理解しています。しかし、私は彼らが「変異」したときに警告があったという印象を受けました:
class Z2
M = [0,1]
end
Z2::M # => [0, 1]
Z2::M = [0,3]
(irb):warning: already initialized constant Z2::M
(irb):warning: previous definition of M was here
ただし、これは常に当てはまるわけではないことがわかりました。
a = Z2::M
a[1] = 2
Z2::M # => [0,2] and no warning
これは「警告」システムのギャップですか?定数の割り当てはそれを複製すると推測していますが、定数と変数が同じオブジェクトを指しているように見えるので、それも真実ではないと思いますか? これは、すべてのいわゆる「定数」が警告なしに変更されるのを防ぐために凍結する必要があるということですか?