Как я могу получить все методы в протоколе? - PullRequest
8 голосов
/ 07 июня 2010

Как я могу получить коллекцию всех (классов) методов в данном протоколе в smalltalk / squeak / pharo?

Я пытаюсь собрать значения, возвращаемые группой методов. Я не хочу хранить методы в экземпляре или переменной класса. Поэтому я решил добавить их в протокол и таким образом «пометить» их.

Спасибо.

1 Ответ

7 голосов
/ 08 июня 2010

В Pharo вы ищете метод ClassDescription>>allMethodsInCategory::

| selectors |
selectors := MyClass allMethodsInCategory: #'protocol name'.

Чтобы найти методы в протоколе на стороне класса, просто отправьте метакласс вместо:

selectors := MyClass class allMethodsInCategory: #'protocol name'.

Другое решение, которое вы, возможно, захотите рассмотреть, - это использование прагмы для обозначения ваших методов.См. Комментарий к классу Pragma для деталей этого подхода.Преимущество заключается в том, что другие пакеты могут свободно добавлять методы, принадлежащие вашей группе (которые должны быть в протоколе *), и в том, что прагма может использоваться и для хранения других метаданных (например, порядка оценки).

Примечание. Селектор allMethodsInCategory: устарел в Pharo 3.0 и более поздних версиях в пользу allSelectorsInProtocol:

...