如何查找 class 在 Pharo 中实现了一个方法?

How do I lookup which class implements a method in Pharo?

这里是新手,正在经历 "Pharo by Example"。这本书提到了一个 EllipseMorph new openInWorld 导致调用 Morph openInWorld 的示例,而 EllipseMorph defaultColor 是一个被覆盖的消息:我如何使用系统浏览器或其他东西来解决这个问题?

通常的查找方法 仅在立即选择的class 中查找匹配项。通常是否可以查找 class 将响应(例如)Foo bar

更新: 感谢所有建议(Finder、Spotter); Debugger 是我遇到过的最让我大开眼界的工具!

Smalltalk 提供了很多工具和浏览器可以帮助您解决这个问题。如果您已经知道消息的名称,您可以:

  • 使用 spotter (Shift+Enter) 输入并查看所有发送者和实施者,以及 select 一个浏览它。
  • 在浏览器中查看方法时,单击方法名称左侧的小绿色 up/down 三角形分别表示层次结构中 and/or 下的实现,以打开浏览器在他们身上。
  • select 消息的名称(几乎)在任何地方并键入 CMD+M 以查看 im补充者和CMD+N看到sender .

在这种情况下,您还可以在 playground 中键入 EllipseMorph new openInWorld,然后从菜单中键入 select Debug-It。这将在 new 上打开带有 selection 的调试器。如果您单击 进入 ,顶行将变为 EllipseMorph class(Behavior) new。这表明此处使用了 Behavior 中的 new。如果您继续使用 进入 (2 次),您会看到它变为 EllipseMorph(BorderedMorph) initialize。通过跟踪发送的消息,您可以看到一切都在何处实施。

添加到 Stephan 的答案 (+1) 中,最简单的方法之一是使用 Finder 工具,尤其是如果您是 Smalltalk 的新手并且更喜欢使用 GUI。只需左键单击背景上的任意位置(相当于 Pharo 图像中的桌面)和 select Tools > Finder:

接下来,输入方法的名称,例如openInWorld 在搜索字段中(确保 "Selectors" 在右侧的下拉列表中 selected)并点击 Enter:

然后您可以浏览所有包含您的搜索字符串的方法(注意它自动是通配符搜索)和实现它们的 classes。底部的面板显示了 selected 实现,上下文菜单为您提供了更多选项,例如浏览 class 您 select 编辑的