2010-06-07 2 views
8

smalltalk/squeak/pharo에서 주어진 프로토콜의 모든 (클래스) 메소드의 콜렉션을 얻으려면 어떻게해야합니까?프로토콜에서 모든 메소드를 얻으려면 어떻게해야합니까?

메서드 그룹에서 반환 된 값을 수집하려고합니다. 인스턴스 또는 클래스 변수에 메서드를 저장하고 싶지 않습니다. 그래서 저는 그것들을 프로토콜에 추가하여 이런 식으로 "표시"할 수 있습니다.

감사합니다.

답변

6

Pharo, 당신이 찾고있는 방법은 ClassDescription>>allMethodsInCategory:입니다 :

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

또 다른 해결책 :

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

단지 대신 메타 클래스에 보내 클래스 측 프로토콜의 메소드를 찾으려면 하지만 대신 플러그인을 사용하여 메소드를 표시하는 것이 좋습니다. 이러한 접근 방법에 대한 자세한 내용은 Pragma 클래스에 대한 설명을 참조하십시오. 다른 패키지가 (* 프로토콜에 있어야하는) 그룹에 속한 메소드를 자유롭게 추가 할 수 있고, 프라그 마가 다른 메타 데이터 (예 : 평가 순서)를 저장하는 데 사용될 수 있다는 이점이 있습니다.

NB. 선택기 allMethodsInCategory:은 Pharo 3.0 이상에서 지원되지 않으며 allSelectorsInProtocol:

+0

#allMethodsInCategory : 역시 스퀵에서 작동합니다. –

+0

+1은 pragma에 대한 추가 정보를 제공합니다. –