Как я могу получить все методы в протоколе?
Вопрос
Как я могу получить коллекцию всех (классовых) методов в данном протоколе в SmallTalk/Sipeak/Pharo?
Я пытаюсь собрать значения, возвращаемые группой методов. Я не хочу хранить методы в экземпляре или переменной класса. Поэтому я мог добавить их в протокол и таким образом, чтобы «отметить» их.
Спасибо.
Решение
В Фаро метод, который вы ищете ClassDescription>>allMethodsInCategory:
:
| selectors |
selectors := MyClass allMethodsInCategory: #'protocol name'.
Чтобы найти методы в протоколе класса, просто отправьте в Metaclass вместо этого:
selectors := MyClass class allMethodsInCategory: #'protocol name'.
Еще одно решение, которое вы, возможно, захотите рассмотреть, однако, - это использовать прагму, чтобы отметить ваши методы. Смотрите комментарий к Pragma
Класс для получения подробной информации об этом подходе. Он имеет преимущества, которые другие пакеты могут свободно добавлять методы, принадлежащие вашей группе (которые должны быть в * протоколе), и что прагма может использоваться для хранения других метаданных (например, порядок оценки).
Нб. Селектор allMethodsInCategory:
был устарел в Pharo 3.0, а затем в пользу allSelectorsInProtocol: