On Thu, 5 Apr 2007, Chris Carter wrote:

> On 4/4/07, Hugh Sasse <hgs / dmu.ac.uk> wrote:
> > Also makes me think: what about non-anonymous singleton classes?
> > 
> > irb(main):002:0> class X << x
> > irb(main):003:1>   def hello
> > irb(main):004:2>     puts "hi"
> > irb(main):005:2>   end
> > irb(main):006:1> end
> > SyntaxError: compile error
> > (irb):2: syntax error, unexpected tLSHFT, expecting '<' or '\n' or ';'
> > class X << x
> >           ^
> >         from (irb):6
> >         from :0
> > irb(main):007:0>
> > 
> > Fair enough! :-)  That would produce some weird prototype based OO
> > if it were allowed, though.
        [...]
> >         Hugh
> > 
> > 
> 
> Intrestingly, you can do things like this:
> > > a = Object.new
> => #<Object:0x13292e4>
> > > b = class <<a
> > > attr_accessor :name
> > > self

Nice!  I never thought of that.
> > > end
> => #<Class:#<Object:0x13292e4>>
> > > b
> => #<Class:#<Object:0x13292e4>>
> > > A = b
> => #<Class:#<Object:0x13292e4>>
> > > A
> => #<Class:#<Object:0x13292e4>>
> 
> With singletons. Which allows you to do things like:
> > > ObjectSpace.each_object(A) { |a| p a }
> #<Object:0x13292e4>
> => 1

to golf that:
irb(main):006:1> A = class << a
irb(main):003:1> attr_accessor :name
irb(main):004:1> self
irb(main):006:1> end
> 
> -- 
> Chris Carter
> concentrationstudios.com
> brynmawrcs.com
> 
        Hugh
>