Come posso ottenere tutti i metodi di un protocollo?
Domanda
Come posso ottenere una raccolta di tutti i metodi (di classe) in un determinato protocollo in Smalltalk / squittio / Pharo?
Sto cercando di raccogliere i valori restituiti da un gruppo di metodi. Io non voglio avere per memorizzare i metodi in una variabile di istanza o di classe. Così ho pensato che potessi aggiungere un protocollo e in questo modo a "marchio" di loro.
Grazie.
Soluzione
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 che si potrebbe prendere in considerazione, però, è quello di utilizzare un pragma per marcare i vostri metodi, invece. Vedere il commento sulla classe Pragma
per i dettagli di questo approccio. Presenta i vantaggi che altri pacchetti possono liberamente aggiungere metodi appartenenti al gruppo (che devono essere in un protocollo *), e che il pragma può essere utilizzata per memorizzare altri metadati e (come un ordine di valutazione, per esempio).
NB. Il allMethodsInCategory:
di selezione è stato deprecato in Pharo 3.0 e versioni successive a favore di allSelectorsInProtocol: