下面的类
Point
包含一个类实例变量@count
,用于计算创建的实例数量。看起来效果不错:
class Point
@count = 0
class << self
attr_accessor :count
end
def initialize(position)
@position = position
self.class.count += 1
end
end
但是,如果我添加一个子类
ColoredPoint
并且我希望 @count
也包含创建的子类的数量:
class ColoredPoint < Point
def initialize(position, color)
super(position)
@color = color
end
end
调用时会出错
ColoredPoint.new(1, 'red')
:
undefined method '+' for nil (NoMethodError)
self.class.count += 1
我怎样才能做到这一点?即使我读过“
你应该不惜一切代价避免它们”,我是否必须使用类变量(
@@count
)?
尝试在
Point
中定义类变量:
@@count = 0
并在
Point
构造函数中递增它:
@@count += 1