如何在Squeak smalltalk中搜索类中的字符串?包内怎么样?

时间:2011-12-24 21:04:43

标签: smalltalk squeak

我搜索并搜索了。

我去了IRC

希望问题不是愚蠢的。如果是的话,谷歌搜索的正确字符串仍然会受到赞赏

2 个答案:

答案 0 :(得分:2)

使用重构引擎回答这些问题非常简单。以下代码查找系统中出现/的所有内容:

allCodeWithSlash := RBBrowserEnvironment new matches: '/'

从那里你可以进一步搜索范围,例如在课堂内:

allCodeWithSlashInClass := allCodeWithSlash forClasses: (Array with: DosFileDirectory)

或在包裹内:

allCodeWithSlashInPackage := allCodeWithSlash forPackageNames: (Array with: 'Files')

如果您加载了UI,则可以在以下任何搜索结果中打开浏览器:

allCodeWithSlashInPackage open

如果您使用OmniBrowser,您还可以构建和导航这些范围,而无需通过重构范围菜单键入任何代码。

答案 1 :(得分:1)

这是一个示例,显示DosFileDirectory中包含字符串'\'的所有方法。

aString := '\\'.
class := DosFileDirectory.
methodsContainingString := class methodDictionary values select: [:method |
    method hasLiteralSuchThat: [:lit |
        (lit isString and: [lit isSymbol not]) and:
            [lit = aString]]].
messageList := methodsContainingString collect: [ :e | MethodReference new setStandardClass: class methodSymbol: e selector ].

SystemNavigation new
    browseMessageList: messageList
    name: 'methods containing string'.

要搜索整个包,请将搜索部分包装在:

package := PackageOrganizer default packageNamed: packageName ifAbsent: [ self error: 'package doesn't exist' ].
package classesAndMetaClasses do: [ :class | ... ]