如何查找哪个类在Pharo中实现方法?

时间:2015-09-25 07:25:50

标签: smalltalk pharo

新手在这里,通过“Pharo by Example”。这本书提到EllipseMorph new openInWorld导致调用Morph openInWorld的示例,而EllipseMorph defaultColor是一个被覆盖的消息:如何使用系统浏览器或其他方式解决这个问题?

通常的 find方法方式只能在紧接选的类中找到匹配项。通常可以查找哪个类会响应(例如)Foo bar吗?

更新: 感谢所有的建议(Finder,Spotter);调试器是我遇到过的工具中最令人大开眼界的!

2 个答案:

答案 0 :(得分:4)

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

  • 使用spotter( Shift + Enter )输入并查看所有发件人和实施者,然后选择一个进行浏览。
  • 在浏览器中查看方法时,单击方法名称左侧的绿色上/下三角形小三角形,分别指示层次结构的上/下,以打开它们上的浏览器。
  • 在任何地方选择消息的名称(几乎)并输入 CMD + M 以查看i m plementors和 CMD + N 查看se n ders。

在这种情况下,您还可以在游乐场中键入$sub_str1,然后从菜单中选择 Debug-It 。这将打开一个调试器,选择EllipseMorph new openInWorld。如果您点击进入,则第一行会更改为new。这表示此处使用了来自EllipseMorph class(Behavior) new的{​​{1}}。如果您继续使用进入(2次),您会看到它变为new。只需跟踪发送的消息跟踪,您就可以看到所有内容的实现位置。

答案 1 :(得分:4)

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

Opening the Finder tool in Pharo

接下来,输入方法的名称,例如搜索字段中的openInWorld(确保在右下角的选项中选择了“选择器”)并点击 Enter

Using the Finder tool in Pharo

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