如何获得协议中的所有方法?

jdi*_*zio 8 smalltalk squeak pharo

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

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

谢谢.

Ash*_*son 7

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

| selectors |
selectors := MyClass allMethodsInCategory: #'protocol name'.
Run Code Online (Sandbox Code Playgroud)

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

selectors := MyClass class allMethodsInCategory: #'protocol name'.
Run Code Online (Sandbox Code Playgroud)

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

NB.allMethodsInCategory:Pharo 3.0及更高版本中的选择器已被弃用allSelectorsInProtocol: