From: Chris Pine Date: 2002-12-13T01:23:46+09:00 Subject: Re: deleting a class I don't understand. Are you saying there's a temporary reference to the class? I was asking why that would be the case when I define a class one way, but not another? This code does NOT remove the class Foo: class Foo; end Object.module_eval { remove_const 'Foo' } GC.start But this DOES remove it: eval 'class Foo; end' Object.module_eval { remove_const 'Foo' } GC.start To sum up all the ways of defining a class I can think of, the following ways of defining a class WILL allow the class to be removed (at least by removing the constant and starting the GC): --> eval 'class Foo; end' --> Foo = Class.new --> load 'foo.rb' --> require 'foo.rb' (foo.rb is simply: class Foo; end) And the following WILL NOT allow the class to be removed: --> class Foo; end --> eval 'Foo = Class.new' # How weird is that?? So I just wanted to know why. If you are saying there's a temporary reference, why is it avoided by using 'eval' (or sometimes *caused* by using 'eval')? Is there a way I can get rid of this temporary reference? Chris