метакласс и конструкторы - PullRequest
1 голос
/ 11 июня 2011

Насколько я понимаю, сложно создавать конструкторы классов в Smalltalk и Objective-C.Это потому, что конструктор не может быть сообщением экземпляра класса, потому что класс Class еще не определен.

Насколько я могу судить, решение состоит в том, чтобы создать новый класс, единственный экземпляр которого самкласс.Но как конструктор работает в этой ситуации?Я не понимаю процесс.

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

Я говорю с точки зрения Smalltalk.Есть два типа вещей, которые вы могли бы разумно назвать конструкторами здесь.Одним из них является метод, который инициализирует новый экземпляр класса.Другое - это то, что инициализирует класс.Ни один из них не сложен.

Например, при инициализации, например, вы реализуете метод "new" в классе как new ^ super new initialize (выполните реализацию суперкласса new, а затем отправьте "initialize""сообщение к результату и возвращение его) Многие классы могут уже наследовать эту реализацию, поэтому вам просто нужно написать метод initialize как

initialize super initialize.foo: = 1. и т. д.

Для инициализации нового класса механизм аналогичен.Вы реализуете метод класса с именем «initialize», и он будет автоматически отправлен при загрузке класса в новую среду Smalltalk (изображение).

0 голосов
/ 11 июня 2011

Решение состоит в том, чтобы создать метод класса, который выполняет всю необходимую инициализацию экземпляра.

...