Моим первым сеансом борьбы с Smalltalk была реализация метакласса.
Подумайте об этом:
Что такое класс 'This is a string'
?Ну, что-то типа String
.
Что такое класс String
?String class
.Примечание: это класс, но у него нет имени, он просто печатает себя как 'String class'.
Что такое класс String class
?Metaclass
.Примечание: это именованный класс.
Что такое класс Metaclass
?Как и следовало ожидать (или нет), это Metaclass class
.Из которых, как и следовало ожидать, класс снова равен Metaclass
.
Это первый круг.Другой, который я сначала нашел довольно эзотерическим (конечно, теперь я ем метаклассы на завтрак), следующий:
Что такое суперкласс String
?Object
(в конце концов, разные реализации Smalltalk имеют разные иерархии классов этих базовых классов).
Что такое суперкласс Object
?nil
.Теперь это интересный ответ в Smalltalk, потому что это на самом деле объект!nil class
ответов UndefinedObject
.Из которых суперкласс - это ... Object
.
Навигация по суперклассу и установлению отношений была для меня настоящей поездкой на роликах в те дни ...