繁体   English   中英

Pharo和Squeak Smalltalk:在包中列出未实现的方法吗?

[英]Pharo and Squeak Smalltalk: Listing unimplemented methods in a package?

如何在包中列出所有未实现的方法? 假定该方法应在该程序包中而不是其他程序中实现(例如,在程序包外部的超类中或在对象中)。

编辑:是的,我想知道“未发送的消息”,但是将分析限制在一个特定的给定包中,例如:

FooPackage unimplementedMessageSends。

我尚未对此进行全面测试,因此您可能需要对其进行一些调整以满足您的要求,但是根据我对您问题的理解,您可能会追求以下目标:

| allMethodsSent allMethodsImplemented |
allMethodsSent := IdentitySet new.
allMethodsImplemented := IdentitySet new.
(SystemOrganization listAtCategoryNamed: #'Collections-Arrayed')
    do: [:eachClassName |
        (Smalltalk at: eachClassName) methodDictionary valuesDo: [:eachMethod |
            allMethodsSent addAll: eachMethod messages.
            ].
        allMethodsImplemented addAll: (Smalltalk at: eachClassName) selectors
        ].
^allMethodsSent
    removeAllFoundIn: allMethodsImplemented;
    yourself

希望至少可以帮助您入门,如果需要进行调整,请查看Behavior类(以了解可以使用的内容,而不是对其进行更改!), CompiledMethodSystemOrganization

显然,该示例使用类别(我假设这就是包的意思?)“ Collections-Arrayed”,但您当然可以对其进行修改以使其成为方法参数,例如:

MyUtilClass unimplementedMessageSendsFor: aCategorySymbol

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM