2016-03-03 35 views
0

我看到这样的事情this library,从他们的父母继承的嵌套类

class A 
    # ... 
    class B < A 
    # ... 
    end 
end 

这是不奇怪?我得到了可以在其他类中声明类的概念,但是这些嵌套类继承自父类。这是不是像一个无限循环?

也许它看起来比较简单,但这张图片让我犹豫不决。我在这里错过了一些隐藏的好处,还是我不知道的特殊Ruby成语?

回答

2

命名空间和子类是两个不同的东西。他们没有任何关系。

这样做:

class A 
    class B 
    end 
end 

你在A命名空间定义B,因此A::B(但B不是A一个子类,实际上它是Object子类)。

这样做:

class A 
end 

class B < A 
end 

定义BA一个子类(但B是不是在A命名空间;事实上,它是主要的环境::(或Object::)的命名空间。

在您的例子:

class A 
    class B < A 
    end 
end 

两个HAPP同时存在,但它们彼此独立,并且没有矛盾。

2

除了@ sawa的回答:这可以作为重构过程中的中间步骤。

说,我遇到了一些大胖类,我清楚地看到几个子类可以在这里提取。但我还不知道他们的名字。而当我这样做时,我可能会在这个过程中多次重命名它们。这使得为​​每个子类创建一个文件成为不必要的障碍。所以我开始在那里声明子类,并在同一个文件中移动代码。当我有点满意时,然后我会将子类移到他们的专用文件。或者,也许我不会,如果他们非常小(我觉得他们不值得一个单独的文件)。