----- Original Message -----
When you write
class Foo; end
Object.module_eval { remove_const 'Foo' }
Now it's not possible to access the class Foo.
----------------------------
Sure it is:
def getAllClasses
classes = []
ObjectSpace.each_object (Module) do |klass|
classes << klass.inspect
end
classes
end
originalClasses = getAllClasses
class Foo; end
Object.module_eval { remove_const 'Foo' }
GC.start
deletedClasses = []
ObjectSpace.each_object (Module) do |klass|
deletedClasses << klass if(!originalClasses.include?(klass.inspect))
end
foo = deletedClasses[0].new
p foo # --> #<Foo:0x2774c30>
Note that if you change
class Foo; end
to
eval 'class Foo; end'
you'll get a NoMethodError, since the class is deleted. This proves that my
code isn't holding a reference to the class.
Chris