在Ruby中,如何统计创建的实例(包括子类)的数量?

问题描述 投票:0回答:1

下面的类

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)?

ruby class oop static subclass
1个回答
0
投票

尝试在

Point
中定义类变量:

@@count = 0

并在

Point
构造函数中递增它:

@@count += 1
© www.soinside.com 2019 - 2024. All rights reserved.