从父级

时间:2016-03-03 16:30:19

标签: ruby

我看到了类似this library的内容:

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

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

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

2 个答案:

答案 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的回答:这可以作为重构过程中的中间步骤。

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