Dang, you beat me to it.  I had typed up a similar response.  Here's a
minor tweak though.

On Apr 15, 4:02 pm, "Harold Hausman" <hhaus... / gmail.com> wrote:
> ... the class <<obj notation, which basically says "build me a new
> class just for object obj." ...

As far as I can tell, all objects (and thus all classes) already have
this singleton class.  "class << klass; self; end" is just a way to
get at it.  why's article defines Object#metaclass as an easy way to
shorthand this long form syntax.

So, it's pretty clear from the docs that ObjectSpace#each_object takes
a module/class as a filter and will return only objects which are
subclasses of said module/class.  If you hand it a metaclass, it does
simply filters for objects which have metaclasses matching the same
criteria.

>> class A; end
=> nil
>> class B < A; end
=> nil
>> metaclass = class << A; self; end
=> #<Class:A>
>> B.kind_of?(metaclass)
=> true
>> B.new.kind_of?(metaclass)
=> false

So ObjectSpace#each_object will end up returning only classes
subclassed from the given "klass" since #kind_of? will hold true for
only those objects matching that criteria.

I think. ;-)