我看到了类似this library的内容:
class A
# ...
class B < A
# ...
end
end
这不奇怪吗?我得到的概念是你可以在其他类中声明类,但那些嵌套类继承自父类。这不是一个无限循环吗?
也许它看起来比较简单,但这张图片让我犹豫不决。我在这里遗漏了一些隐藏的好处,还是我不知道的特殊的Ruby习语?
答案 0 :(得分:3)
命名空间和子类化是两回事。他们彼此没有关系。
通过做:
class A
class B
end
end
您在B
的命名空间中定义A
,因此A::B
(但B
不是A
的子类;实际上它是一个子类Object
)。
通过做:
class A
end
class B < A
end
您将B
定义为A
的子类(但B
不在A
的命名空间中;实际上它位于主环境的命名空间中{ {1}}(或::
)。
在你的例子中:
Object::
两者同时发生,但它们彼此独立,并没有矛盾。
答案 1 :(得分:2)
除了@ sawa的回答:这可以作为重构过程中的中间步骤。
说,我遇到了一些大胖类,我清楚地看到可以在这里提取几个子类。但我还不知道他们的名字。当我这样做时,我可能会在这个过程中多次重命名它们。这使得为每个子类创建一个文件是一个不必要的障碍。所以我开始在那里声明子类,并在同一个文件中移动代码。当我有点满意时,然后我会将子类移动到他们的专用文件中。或者也许我不会,如果他们非常小(我觉得他们不配单独的文件)。