【问题标题】:Nested classes that inherit from their parent从父级继承的嵌套类
【发布时间】:2016-03-03 16:30:18
【问题描述】:

我看到了这样的this library

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

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

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

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

    通过做:

    class A
      class B
      end
    end
    

    您在A 的命名空间中定义B,因此A::B(但B 不是A 的子类;实际上它是Object 的子类)。

    通过做:

    class A
    end
    
    class B < A
    end
    

    您将B 定义为A 的子类(但B 不在A 的命名空间中;实际上它在主环境::(或Object::)的命名空间中.

    在你的例子中:

    class A
      class B < A
      end
    end
    

    两者同时发生,但相互独立,并不矛盾。

    【讨论】:

      【解决方案2】:

      除了@sawa 的回答:这在重构过程中作为中间步骤很有用。

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

      【讨论】:

        猜你喜欢
        • 2014-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多