从类继承时,其内部类仍继承自父类

时间:2016-02-23 12:19:26

标签: ruby oop inheritance

在创建子类时,其内部类将始终从父类继承,而不是子类。

class Create
  class Draft < self
    # code
class Update < Create
  # Update::Draft's is implicitly created, but its parent is Create, not `Update`. Why?

Create::Draft.superclass将返回Create。没关系。但Update::Draft.superclass也将返回Create。我希望Update::Draft继承Update类。

1 个答案:

答案 0 :(得分:1)

Ruby没有嵌套类,这也意味着它没有虚拟类(显然,因为虚拟类是嵌套类的特例)。如果你想使用虚拟类,你需要使用支持它的语言,例如Beta,gBeta或(我不知道其他任何人)。

由于虚拟类是虚拟的嵌套类,因此您可以使用方法(嵌套在类和虚拟内部)返回类(在Ruby中为第一类对象,因此可以返回)在Ruby中对它们进行排序。通过方法)。

但仍然没有解决在类声明期间仅对一次评估超类表达式的问题,而不是每次为每个消息发送都评估。同样,执行此操作,因此您可以使用它。

您的代码还有其他问题。例如,你想要一个Update::Draft类神奇地出现。如果你想要第四堂课,你需要定义第四堂课。没有第四堂课。甚至没有第四个常数。它只是不断的查找规则。 Update没有名为Draft的常量,因此Ruby继续查看词法封闭类(Object),它也没有名为{{1}的常量所以它继续查看超类并在那里找到它。没有出现。它总是在那里。

由于只有一个类,它不能在不同的时间拥有不同的超类,你真的需要类。

您基本上想要的是类层次结构继承,这是虚拟类启用的功能。 解析器组合库是使用类层次结构继承的一个很好的例子。