Class.new and inspect

I’m curious as to how this little bit of magic works:

hal@alpha ~/projects/peco $ irb
irb(main):001:0> foo = Class.new(Array)
=> #Class:0x40202470
irb(main):002:0> MyArray = Class.new(Array)
=> MyArray
irb(main):003:0>

In other words, when I create a class with Class.new, and assign it
to a constant, somehow it knows its own name (via inspect), just as
if I had done “class MyArray < Array”.

In the latter case, somehow it’s more understandable to me.

Perhaps even more perplexing:

irb(main):007:0> A = B = C = Class.new(Hash)
=> B
irb(main):008:0> x = C.new
=> {}
irb(main):009:0> x.class
=> B

What? Not A or C, the first or last, but B?

Anyone?

Hal

Hi,

···

In message “Class.new and inspect” on 04/01/23, Hal Fulton hal9000@hypermetrics.com writes:

Perhaps even more perplexing:

irb(main):007:0> A = B = C = Class.new(Hash)
=> B
irb(main):008:0> x = C.new
=> {}
irb(main):009:0> x.class
=> B

What? Not A or C, the first or last, but B?

When inspecting unnamed class, Ruby look around the constants for the
name of the class, B this case is found first.

						matz.