Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # shortcut method for opening a metaclass on the receiver
- module Kernel;def m;class << self;self;end;end;end
- Module.m # #<Class:Module>, metaclass of Module
- Module.m.superclass # Class, because that is how Module is bootstrapped
- Module.m.m # #<Class:#<Class:Module>>, metaclass of Module's metaclass
- Module.m.superclass # #<Class:#<Class:Module>>
- Module.m.m.superclass # #<Class:#<Class:Module>>
- # Opening a metaclass on Module's metaclass changes its superclass to be the same as its metaclass's superclass!?
- # the same behavior occurs at arbitarily deep meta-levels:
- Object.m.superclass # Class
- Object.m.m.superclass # #<Class:#<Class:Object>>
- Object.m.superclass # #<Class:#<Class:Object>>
- # opening a third metaclass modifies the superclass of 'm.m', but leaves 'm' alone
- Object.m.m.m # #<Class:#<Class:#<Class:Object>>>
- Object.m.m.superclass # #<Class:#<Class:#<Class:Object>>>
- Object.m.m.m.superclass # #<Class:#<Class:#<Class:Object>>>
- Object.m.superclass # #<Class:#<Class:Object>>
- # same deal for regular old Object instances, vs. classes and modules
- o = Object.new # #<Object:0x101168440>
- o.m # #<Class:#<Object:0x101168440>>
- o.m.superclass # #<Class:Object> (at this point the superclass is Object's metaclass)
- o.m.m # #<Class:#<Class:#<Object:0x101168440>>> (meta-metaclass of o)
- # ...and now the superclass of meta and the superclass of meta-meta are the same:
- o.m.superclass # #<Class:#<Class:#<Object:0x101168440>>>
- o.m.m.superclass # #<Class:#<Class:#<Object:0x101168440>>>
Add Comment
Please, Sign In to add comment