スーパークラスが異なるクラスを定義すると TypeError になる。
class A < Hash ; end class A < Array ; end #=> superclass mismatch for class A (TypeError)
そこで Module#remove_const
remove_const(name) -> object name で指定した定数を取り除き、その定数に設定されていた値を返します。 [PARAM] name: String または Symbol を指定します。 [RETURN] 引数で指定された定数に設定されていた値を返します。 [EXCEPTION] NameError: 引数で指定された定数がそのモジュールやクラスに 定義されていない場合に発生します。instance method Module#remove_const
やってみる
class A < Hash ; end class Object remove_const :A end class A < Array ; end puts self #=> main puts self.class #=> Object
トップレベルで定義されるクラスは Object クラスの main オブジェクトに属するので、Object クラスをオープンして A クラス(定数)を削除できる(と解釈している)。