2010-06-07 11 views
8

Wie kann ich eine Sammlung aller (Klasse) Methoden in einem bestimmten Protokoll in Smalltalk/Quietschen/Pharo bekommen?Wie kann ich alle Methoden in einem Protokoll bekommen?

Ich versuche, die von einer Gruppe von Methoden zurückgegebenen Werte zu sammeln. Ich möchte die Methoden nicht in einer Instanz oder Klassenvariablen speichern müssen. Also könnte ich sie zu einem Protokoll hinzufügen und auf diese Weise "markieren".

Danke.

Antwort

6

In Pharo, die Methode, die Sie suchen sind, ist ClassDescription>>allMethodsInCategory::

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

Um Methoden in einer Klasse seitigen Protokoll zu finden, auf die Metaklasse senden nur statt:

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

Eine andere Lösung Sie sollten jedoch in Erwägung ziehen, stattdessen ein Pragma zu verwenden, um Ihre Methoden zu markieren. Details zu diesem Ansatz finden Sie im Kommentar zur Klasse Pragma. Es hat den Vorteil, dass andere Pakete frei Methoden hinzufügen können, die zu Ihrer Gruppe gehören (die in einem * Protokoll sein müssen), und dass das Pragma auch dazu verwendet werden kann, andere Metadaten zu speichern (zum Beispiel eine Bewertungsreihenfolge).

NB. Der Selektor allMethodsInCategory: wurde in Pharo 3.0 und später zugunsten allSelectorsInProtocol: veraltet

+0

#alleMethodsInCategory: funktioniert auch in Squeak. –

+0

+1 für die zusätzlichen Informationen über Pragmas –

Verwandte Themen