2010-06-07 47 views
8

如何获得一个给定协议中的所有(类)方法的集合在smalltalk/squeak/pharo中?如何获取协议中的所有方法?

我试图收集一组方法返回的值。我不希望将方法存储在实例或类变量中。所以我尽管可以将它们添加到协议中并以这种方式“标记”它们。

谢谢。

回答

6

在菲罗,你要寻找的方法是ClassDescription>>allMethodsInCategory:

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

要找到一类端协议的方法,只需发送到元类来代替:

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

另一种解决方案不过,您可能需要考虑的是,使用附注标记来标记您的方法。有关该方法的详细信息,请参阅Pragma类的评论。其优点是其他软件包可以自由添加属于您的组的方法(需要使用*协议),并且该编译指示可以用于存储其他元数据(例如,评估顺序等)。

注:选择器allMethodsInCategory:已在Pharo 3.0中弃用,后来转而采用allSelectorsInProtocol:

+0

#allMethodsInCategory:也适用于Squeak。 – 2010-06-15 16:13:53

+0

+1有关编译指示的其他信息 – 2012-12-03 16:09:29

相关问题