さて、Rubyでは大文字の識別子が「一定」であるように見えることは誰もが知っています。
ただし、定数に新しい値を割り当てることは可能であるため、次のように機能します
class A
def self.hi; "hi"; end
end
class B
def self.hi; "ho"; end
end
A.hi # => "hi"
B.hi # => "ho"
A = B
# warning: already initialized constant A
# => B
A.hi # => "ho"
また、小文字の識別子への割り当ても機能します。
a = B
a.hi # => "ho"
ただし、内部名はすべての場合で「B」に設定され、新しい識別子名も「B」のみを参照しています。
しかし、識別子に小文字の名前を付けても技術的に問題がない場合、クラスの内部名にこの制限があるのはなぜですか?一定ではないので、一定である必要があるということはあり得ません。したがって、他の理由は、小文字の識別子のスコープが異なることである可能性があります。しかし、それでは、なぜ小文字のスコープを持つクラスを持たないのでしょうか。
パーサーはUnicodeなどのメソッド名も許可しているので、不思議に思っています。そのため、クラスの場合、それがはるかに制限されているのは奇妙に思えます。