如何在继承class中自动声明Class实例变量
How to declare Class Instance Variable in inherited class automatically
我在 Ruby 中使用 Class 继承变量来跟踪到目前为止我创建的实例数。为了让我的代码保持干燥,我在我的所有其他 classes 继承自的基础 class 中实现了大部分逻辑。
class Entity
@instance_counter = 0
class << self
attr_accessor :instance_counter
end
def initialize
self.class.instance_counter += 1
end
end
除一件事外,这工作得很好:
我必须在每个 child class 中定义 @instance_counter
,否则我会得到一个 NoMethodError
.
class Child < Entity
@instance_counter = 0
end
有没有办法在每个 child 中自动声明变量,这样我就不必手动进行了?
我不知道这是否是最好的方法,但我可能会这样做:
class Entity
singleton_class.send(:attr_writer, :instance_counter)
def self.instance_counter; @instance_counter ||= 0; end
def initialize
self.class.instance_counter += 1
end
end
我在 Ruby 中使用 Class 继承变量来跟踪到目前为止我创建的实例数。为了让我的代码保持干燥,我在我的所有其他 classes 继承自的基础 class 中实现了大部分逻辑。
class Entity
@instance_counter = 0
class << self
attr_accessor :instance_counter
end
def initialize
self.class.instance_counter += 1
end
end
除一件事外,这工作得很好:
我必须在每个 child class 中定义 @instance_counter
,否则我会得到一个 NoMethodError
.
class Child < Entity
@instance_counter = 0
end
有没有办法在每个 child 中自动声明变量,这样我就不必手动进行了?
我不知道这是否是最好的方法,但我可能会这样做:
class Entity
singleton_class.send(:attr_writer, :instance_counter)
def self.instance_counter; @instance_counter ||= 0; end
def initialize
self.class.instance_counter += 1
end
end