Metaclass - Alternative Definition

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.

  1. The metaclass root is the class of the inheritance root.
  2. 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:

    No alternative to the
    one-man path.
    Denise Levertov (b. 1923)

    Mothers often are too easily intimidated by their children’s negative reactions...When the child cries or is unhappy, the mother reads this as meaning that she is a failure. This is why it is so important for a mother to know...that the process of growing up involves by definition things that her child is not going to like. Her job is not to create a bed of roses, but to help him learn how to pick his way through the thorns.
    Elaine Heffner (20th century)