squeak(smalltalk) 如何获取对象的所有方法(继承方法也是如此)

Guy*_*oun 1 smalltalk squeak

我怎样才能得到一个对象可以理解的所有方法的列表?

例如:

set := 8 getAllMethods
Run Code Online (Sandbox Code Playgroud)

会给我所有8可以理解的方法set

Jay*_*ayK 6

在代码中,您可以使用allSelectors

set := 8 class allSelectors
Run Code Online (Sandbox Code Playgroud)

为您提供一组 8 可以理解的所有消息名称(又名选择器)。

如果您需要 CompiledMethods 而不仅仅是消息名称,您可以使用 lookupSelector:

| class |
class := 8 class. "will be SmallInteger"
set := class allSelectors collect: [:each | class lookupSelector: each]
Run Code Online (Sandbox Code Playgroud)

如果您不想在代码中执行此操作,而是想在 IDE 中找出对象可以理解的消息,那么我建议使用协议浏览器(又名 Lexicon 工具)。您可以通过类的上下文菜单中的“浏览协议”打开它:

显示浏览协议的屏幕截图

我用它来查找 allSelectors 和 lookupSelector:,它们是从 Behavior 继承的,并没有在 Class 本身中定义。

显示协议浏览器的屏幕截图,显示 allSelectors 方法的代码