Alternative Definition
The classical definition of a metaclass as a class whose instances are classes poses several problems:
- All classes without instances would pass the definition, so that they become metaclasses by vacuous truth.
- If the "instance-of" term is used in the non-strict sense, allowing indirect instances, the inheritance root can be wrongly recognized as a metaclass.
- The requirement that a metaclass is a class disallows (or at least complicates) a uniform view of the Ruby and Smalltalk-80 object model.
The following alternative definition, based on the eigenclass model, avoids all the above problems.
- The metaclass root is the class of the inheritance root.
- An object is a metaclass if it is an inheritance descendant of the metaclass root.
In (2), inheritance descendant is meant in the non-strict sense – including the metaclass root itself. The definition applies to all of Ruby, Python, Scala, Java, Smalltalk and CLOS, although in the case of the latter two languages care must be taken as to what is meant by class of in (1). Unfortunately, the introspection methods class
(in Smalltalk) and class-of
(in CLOS) are misleading here.
For Objective-C, a modified definition has to be used due to the multiplicity and degeneracy of inheritance roots.
Read more about this topic: Metaclass
Famous quotes containing the words alternative and/or definition:
“A mental disease has swept the planet: banalization.... Presented with the alternative of love or a garbage disposal unit, young people of all countries have chosen the garbage disposal unit.”
—Ivan Chtcheglov (b. 1934)
“The definition of good prose is proper words in their proper places; of good verse, the most proper words in their proper places. The propriety is in either case relative. The words in prose ought to express the intended meaning, and no more; if they attract attention to themselves, it is, in general, a fault.”
—Samuel Taylor Coleridge (17721834)