#methods #reflection #pharo #idioms
#методы #отражение #pharo #идиомы
Вопрос:
Иногда требуется проанализировать все методы в изображении. Один из способов сделать это — работать с CompiledMethod allInstances
. Но делать это таким образом опасно, поскольку
- В конечном итоге вы можете использовать старые методы, которые еще не были собраны с помощью мусора.
- Могут быть скомпилированные методы анонимных классов или другие экземпляры, которые существуют по техническим причинам.
Ответ №1:
Выражение, не зависящее от диалекта, будет
ProtoObject withAllSubclasses gather: [:cls |
cls methodDictionary values asArray,
cls class methodDictionary values asArray]
Ответ №2:
Одна вещь, которую я придумал, это:
RPackage organizer packages flatCollect: #methods
Комментарии:
1. Кстати, комментарий к этому методу предлагает использовать
RPackage organizer
вместо этого, хотя я никогда не сталкивался с проблемой с вашим вариантом.
Ответ №3:
Я бы предложил использовать SystemNavigation
класс, предназначенный для этого:
SystemNavigation default allMethodsSelect: [:m | true]