メタクラス
このトリックによって、さらにメタ、さらにそのメタ...と永遠に繰り返さずにも済むようになっている。
メタクラスはクラス生成時に同時に生成される。より具体的には、あるクラス(将来のスーパークラス)に対して、そのサブクラスとして例えばFooを生成するように命ずると、まず暗黙のうちにFoo classが生成され、そのインスタンスとしてFooが生成される。先にも述べたがメタクラスは無名であり、クラスブラウザのクラス一覧にも現れえない。しかし、メタクラスが必ずクラスとペアで生成されることを利用して、クラスブラウザではclassボタン(古典的なクラスブラウザではクラス一覧を表示する枠に設置されている)を押して表示を切り替えることで対応するメタクラスの定義にアクセスしたりその内容(クラスインスタンス変数やクラスメソッド)を編集可能になっている。
クラスおよびメタクラスの振る舞いは次の4段階の継承階層を経て定義されている。
Object - インスタンス・クラスの別なく、オブジェクトとしての普遍的な振る舞い Behavior - クラスの最低限の振る舞い(コンパイルされたメソッドの保持やインスタンス生成) ClassDescription (抽象クラス) - クラスの振る舞い(メソッドのコンパイルやカテゴリ管理) Class - 通常のクラスの振る舞い(スーパークラスとしての振る舞いやクラス分類など) Metaclass - メタクラス独自の振る舞い(一部メッセージをクラスにリダイレクトするなど)