Guest User

Untitled

a guest
Apr 26th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. # shortcut method for opening a metaclass on the receiver
  2. module Kernel;def m;class << self;self;end;end;end
  3.  
  4. Module.m # #<Class:Module>, metaclass of Module
  5. Module.m.superclass # Class, because that is how Module is bootstrapped
  6.  
  7. Module.m.m # #<Class:#<Class:Module>>, metaclass of Module's metaclass
  8. Module.m.superclass # #<Class:#<Class:Module>>
  9. Module.m.m.superclass # #<Class:#<Class:Module>>
  10. # Opening a metaclass on Module's metaclass changes its superclass to be the same as its metaclass's superclass!?
  11.  
  12. # the same behavior occurs at arbitarily deep meta-levels:
  13. Object.m.superclass # Class
  14. Object.m.m.superclass # #<Class:#<Class:Object>>
  15. Object.m.superclass # #<Class:#<Class:Object>>
  16. # opening a third metaclass modifies the superclass of 'm.m', but leaves 'm' alone
  17. Object.m.m.m # #<Class:#<Class:#<Class:Object>>>
  18. Object.m.m.superclass # #<Class:#<Class:#<Class:Object>>>
  19. Object.m.m.m.superclass # #<Class:#<Class:#<Class:Object>>>
  20. Object.m.superclass # #<Class:#<Class:Object>>
  21.  
  22. # same deal for regular old Object instances, vs. classes and modules
  23. o = Object.new # #<Object:0x101168440>
  24. o.m # #<Class:#<Object:0x101168440>>
  25. o.m.superclass # #<Class:Object> (at this point the superclass is Object's metaclass)
  26. o.m.m # #<Class:#<Class:#<Object:0x101168440>>> (meta-metaclass of o)
  27. # ...and now the superclass of meta and the superclass of meta-meta are the same:
  28. o.m.superclass # #<Class:#<Class:#<Object:0x101168440>>>
  29. o.m.m.superclass # #<Class:#<Class:#<Object:0x101168440>>>
Add Comment
Please, Sign In to add comment