Добавление / переопределение / редактирование методов тела в классе (Smalltalk - Squeak) - PullRequest
1 голос
/ 01 мая 2011

Как я могу добавить новые методы или удалить методы определенного класса ? Или, если я попытаюсь добавить метод, который уже существует, так что он переопределит его (хотя в этом случае я могу просто удалить старый и добавить новый, такой же)?

Можно ли это сделать, если сам метод представлен в виде строки? (Я имею в виду делать это без использования внешних файлов и тому подобного, но просто записать метод в виде строки).

Например, метод, который получает класс, символ и строку, которая является кодом метода, добавляет этот метод в класс aClass и, если существует, переопределяет старый:

in: aClass add: aSymbol sourceCode: aString

и пример использования:

in: ClassA add: #something sourceCode: 'self subclassResponsibility'

1 Ответ

6 голосов
/ 01 мая 2011

Это довольно просто.Проверьте категорию «компиляция» в классе поведения.Вы можете сделать что-то вроде:

 MyClass compile: 'something
   ^ self subclassResponsability'.

Проверьте остальные методы в категории «компиляция», где вы можете указать, в какую категорию помещать метод, кому уведомлять, блоку ошибок и т. Д.Если вы вызываете #compile: с существующим методом, он просто перезапишет его.

Для удаления, то же самое, проверьте методы типа #removeSelector: реализовано в Behavior или ClassDescription.Вы можете сделать:

 MyClass removeSelector: something.

Приветствия

...