2010-07-14 3 views
1

Учитывая следующий код Ruby, и если у меня есть экземпляр класса Klass, как я могу вызвать метод do_stuff в моем экземпляре Klass. Я хочу передать экземпляр Klass в Subklass. Я понимаю, что в Ruby это невозможно, но есть ли способ подделать его?Поддельный литой тип в Ruby?

class Klass 
    ... 
end 

class Subklass < Klass 
    ... 
    def do_stuff 
    ... 
    end 
end 

inst = Klass.new 
inst.magically_convert_to_subklass_instance # Need help here 
inst.do_stuff 

ответ

2

Наследование не работает таким образом. Если у вас есть экземпляр Klass, вы не можете использовать его как Subklass. Чтобы использовать общий код, вы можете использовать модуль для определения метода do_stuff для добавления функций из модуля в Klass. , а именно:

module StuffModule 
    def do_stuff 
    print "do stuff" 
    end 
end 

class Klass 
include StuffModule 
end 

inst = Klass.new 
inst.do_stuff 
+0

Rught, конечно же, вы не можете отливать «вверх» в любом случае. Спасибо за альтернативу. – Joel