----- 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