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