0

根类 Shipping 想要记录它的所有子类。但是当一个类 Grandchild 从 Shipping 的孩子继承时,就会发生错误。有人知道为什么会这样吗?先感谢您。

代码:

class Shipping
  @children = []
  def self.inherited(child)
    puts "#{child.name} inherit Shipping"
    @children << child
  end
  def self.show_children
    p @children
  end 
end

class Child1 < Shipping
end

class Child2 < Shipping
end

class Grandchild < Child2
end

Shipping.show_children

结果:

$ jruby temptry.rb
    Child1 inherit Shipping
    Child2 inherit Shipping
    Grandchild inherit Shipping
    NoMethodError: undefined method `<<' for nil:NilClass
        inherited   at temptry.rb:5
            (root) at   temptry.rb:18
4

1 回答 1

0

当一个类继承另一个类时,方法被继承,但类实例变量没有特别初始化。您只为 初始化,但没有@children为初始化。ShippingGrandchild

如果你想在继承的类之间共享一个变量,那么你应该使用一个类变量。如果你这样做:

class Shipping
  @@children = []
  ...
end

并将所有更改@children@@children,然后它们将被共享。

于 2013-11-14T13:28:02.503 回答