Constants in ruby are actually not constants.
Constants are instead treated pretty similar to global variables. (There are certain scope differences)
You are perfectly free to do something like this: (And vice versa)
$game_system = Game_System
The semantics allow this structure. You can use the same method for $game_system and Game_System.
Conceptually... Well I think you can guess what I think about it.
I believe like ERZENGEL that you can change constants to allow extensions to classes. The majority of scripts on this forum would not work were you not allowed to do so.
I would suggest that you generally treat constants like they are actual constants. (With the exception of extending/changing classes)
@ERZENGEL:
You are not right about how the .freeze method works. It freezes the object itself, not the reference to it which in your case is a constant. You do get an error with the A[1] = 2 but not with A = 2. Look at this example:
A = Array.new()
A.freeze() # !!!
p A.frozen?() # => true
p A = 2 # 2
p A.frozen?() # => false
Note also that freezing objects only prevents assigning instance/class variables to new objects.
You can for example try using this:
What do you believe happens when you change a switch?
*hugs*
- Zeriab