Tridy samozrejmne nejsou vsechny instanci Metaclass a navic rozhodne neni pravda, ze se vsechny chovaji stejne, napriklad se da predpokladat, ze kazda metatrida implementuje metodu #new nejak jinak. Ve skutecnosti je to tak, ze ke kazde tride Foo jeste existuje specialni trida jejiz jedinou instanci je Foo, pristupna obvykle pouze jako „Foo class“, a az tato trida (ktera je potomkem krome jineho Object class a Class) je instanci Metaclass. Uvedenou metodu #new bych hledal spise na instancni strane Metaclass nez tridni (uz jenom kvuli tomu thisClass).
Shrnu to
objekt
– př.: 1
– instance třídy
třída
– př.: 1 class = SmallInteger
– definuje chování objektů (inst. část v Browseru)
– instance metatřídy
metatřída
– př.: 1 class class = SmallInteger class
– definuje chování třídy (class část v Browseru)
– instance Metaclass
Metaclass
– př: 1 class class class = Metaclass
– definuje chování metatřídy (inst. část v Browseru pro třídu Metaclass)
– třída metatřídy
metatřída Metaclass
– př: 1 class class class class = Metaclass class
– definuje chování třídy Metaclass (class část v Browseru pro třídu Metaclass)
metatřída metatřídy Metaclass
– 1 class class class class class = Metaclass
– zacyklení
Pavel si neuvědomil, že metatřída není Metaclass, ale instance Metaclass