Root类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
答案 0 :(得分:0)
当一个类继承另一个类时,这些方法是继承的,但是类实例变量没有特别初始化。您只为@children
初始化了Shipping
,但未对Grandchild
进行初始化。
如果要在继承的类之间共享变量,那么您应该使用类变量。如果你这样做:
class Shipping
@@children = []
...
end
并将所有@children
更改为@@children
,然后将共享这些内容。