8

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

我正在尝试收集一组方法返回的值。我不想将方法存储在实例或类变量中。所以我虽然可以将它们添加到协议中,并以这种方式“标记”它们。

谢谢。

4

1 回答 1

7

在 Pharo 中,您正在寻找的方法是ClassDescription>>allMethodsInCategory:

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

要在类端协议中查找方法,只需发送到元类:

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

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

注意。选择器allMethodsInCategory:在 Pharo 3.0 中已被弃用,后来被支持allSelectorsInProtocol:

于 2010-06-07T22:49:25.400 回答