Установить наследование класса после делкарации класса ИЛИ установить наследование класса в классе const_set - PullRequest
12 голосов
/ 27 августа 2009

Если класс был ранее определен, как я могу сказать ему наследовать от класса Parent

Например:

class Parent
  ..
end

class Klass
  ..
end

Теперь я хочу, чтобы он наследовал от Родителя

Я не могу повторно открыть класс и установить его, потому что я получу ошибку несоответствия классов

class Klass < Parent
  ..
end

В частности, я пытаюсь выяснить, как установить наследование класса для класса, который он создает с помощью Object.const_set

klass = Object.const_set('Klass', Class.new)

Как я могу сказать Klass наследовать от класса Parent?

1 Ответ

26 голосов
/ 27 августа 2009

Нет способа изменить суперкласс уже существующего класса.

Чтобы указать суперкласс класса, который вы создаете динамически, вы просто передаете суперкласс в качестве аргумента Class.new.

class Parent
end
klass = Class.new(Parent)
klass.superclass #=> Parent

Так же, как примечание: вы не создаете класс с const_set. Вы создаете это с Class.new. Вы просто сохраняете созданный класс в константе с const_set. Как только const_set вызван, Class.new уже произошел, и суперкласс больше не может быть изменен.

...