0
我要跟踪类的所有实例,下面的代码工作完美,但不是很干。其中红宝石重复数据删除和跟踪情况
class BaseClass
end
class ClassA < BaseClass
@@instances = []
attr_accessor :name
def initialize(name)
@name = name
@@instances << self
end
def self.list
@@instances
end
def to_s
@name
end
end
class ClassB < BaseClass
@@instances = []
attr_accessor :name
def initialize(name)
@name = name
@@instances << self
end
def self.list
@@instances
end
def to_s
@name
end
end
puts "Creating instances"
a = ClassA.new "a"
aa = ClassA.new "aa"
b = ClassB.new "b"
puts "Listing for ClassA"
puts ClassA.list
puts "Listing for ClassB"
puts ClassB.list
输出成为
Creating instances
Listing for ClassA
a
aa
Listing for ClassB
b
完善。然而,当我试图重复数据删除它像这样
class BaseClass
@@instances = []
attr_accessor :name
def initialize(name)
@name = name
@@instances << self
end
def self.list
@@instances
end
def to_s
@name
end
end
class ClassA < BaseClass
end
class ClassB < BaseClass
end
puts "Creating instances"
a = ClassA.new "a"
aa = ClassA.new "aa"
b = ClassB.new "b"
puts "Listing for ClassA"
puts ClassA.list
puts "Listing for ClassB"
puts ClassB.list
我得到以下输出
Creating instances
Listing for ClassA
a
aa
b
Listing for ClassB
a
aa
b
这使得因为@@instances
在BaseClass
定义,并与ClassA
和ClassB
共享感。
我怎样才能让我的代码重复数据删除看起来像后者的例子,使得它像前者的例子吗?
完美。为了完整性,我更新了列表函数以定义self.list; ObjectSpace.each_object(Object.const_get(名称))。to_a结束 – zeroXten