2010-06-07 16 views
8

Come posso ottenere una raccolta di tutti i metodi (di classe) in un determinato protocollo in smalltalk/squeak/pharo?Come posso ottenere tutti i metodi in un protocollo?

Sto provando a raccogliere i valori restituiti da un gruppo di metodi. Non voglio dover memorizzare i metodi in un'istanza o in una variabile di classe. Quindi, anche se potrei aggiungerli a un protocollo e in questo modo "segnarli".

Grazie.

risposta

6

Nel Pharo, il metodo che stai cercando è ClassDescription>>allMethodsInCategory::

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

Per trovare metodi in un protocollo di classe, semplicemente facendo inviare al metaclasse invece:

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

Un'altra soluzione si potrebbe voler considerare, tuttavia, è quello di utilizzare un pragma per contrassegnare i metodi invece. Vedere il commento sulla classe Pragma per i dettagli di tale approccio. Ha i vantaggi che altri pacchetti possono liberamente aggiungere metodi appartenenti al tuo gruppo (che devono essere in un protocollo *) e che il pragma può essere usato anche per memorizzare altri metadati (come un ordine di valutazione, per esempio).

NB. Il selettore allMethodsInCategory: è stato dichiarato obsoleto in Pharo 3.0 e successivamente in favore di allSelectorsInProtocol:

+0

#allMethodsInCategory: funziona anche in Squeak. –

+0

+1 per ulteriori informazioni sulla direttiva –

Problemi correlati