The easiest way is to get rid of the trick you are trying to do, and use ObjectSpace.each_object
.
class BaseClass
attr_accessor :name
def initialize(name); @name = name 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 ObjectSpace.each_object(ClassA).to_a
puts "Listing for ClassB"
puts ObjectSpace.each_object(ClassB).to_a
This gives
Creating instances
Listing for ClassA
aa
a
Listing for ClassB
b