2015-05-29 85 views
1

我有两个基类和多个子类。根据类型,子类动态地继承基类父类。Ruby:动态继承

如:

class Dad 
    def initialize 
     #initialize some stuffs 
    end 
end 

class Mom 
    def initialize 
     #initialize some stuffs 
    end  
end 

class child 
def initialize 
     super 
     #initialize some stuffs 
    end 
end 

class child2 
    def initialize 
     super 
     #initialize some stuffs 
    end  
end 

class child3 
end 

如何父类分配给动态子类?在只有创作的时候,我会选择子类及其相应的父类进行进一步

+0

你为什么要这么做?你想达到什么目的? – spickermann

+1

为了给予深入的解释,让我们假设有两种类型的公司,服务和产品(父类)。除此之外,还有'n'类子公司继承了父类的特性,并且它将拥有自己的特性和功能。在创作时,我会选择子类和其相应的父类以进一步进行.. – ErRoR

回答

0

也许你正在寻找这个

Child = Class.new Parent do 
    def foo 
    "foo" 
    end 
end 

Child.ancestors # => [Child, Parent, Object, Kernel] 
Child.new.bar  # => "bar" 
Child.new.foo  # => "foo" 

哪里parent是妈妈/爸爸

1

通常,你可以't,但你可以用一些'邪恶'。

首先,您需要安装一个名为'RubyInline'的gem才能工作。

然后你猴子修补Class类,像这样:

require 'inline' 
class Class 
    inline do |builder| 

     builder.c %{    
      VALUE set_super(VALUE sup) { 
       RCLASS(self)->super = sup; 
       return sup; 
      } 
     } 

     builder.c %{ 
      VALUE get_super() { 
       return RCLASS(self)->super; 
      } 
     } 

    end 
end 

这将允许您获取和设置超级类(直接继承类)的特定类。

然后,你可以这样做:

Child2.set_super(New_Parent_Class)