2010-06-07 16 views
8

¿Cómo puedo obtener una colección de todos los métodos (de clase) en un protocolo dado en smalltalk/squeak/pharo?¿Cómo puedo obtener todos los métodos en un protocolo?

Estoy tratando de recopilar los valores devueltos por un grupo de métodos. No quiero tener que almacenar los métodos en una instancia o variable de clase. Entonces pensé que podría agregarlos a un protocolo y de esta manera "marcarlos".

Gracias.

Respuesta

6

En Pharo, el método que está buscando es ClassDescription>>allMethodsInCategory::

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

Para encontrar métodos en un protocolo del lado de la clase, basta con enviar a la metaclase lugar:

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

Otra solución Es posible que desee considerar, sin embargo, utilizar un pragma para marcar sus métodos. Vea el comentario en la clase Pragma para detalles de ese enfoque. Tiene la ventaja de que otros paquetes pueden agregar libremente métodos que pertenecen a su grupo (que deben estar en un protocolo *), y que el pragma también se puede usar para almacenar otros metadatos (como una orden de evaluación, por ejemplo).

NB. El selector allMethodsInCategory: ha quedado obsoleto en Pharo 3.0 y posterior a favor de allSelectorsInProtocol:

+0

#allMethodsInCategory: funciona en Squeak, también. –

+0

+1 para la información adicional sobre pragmas –

Cuestiones relacionadas