[英]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
类(以了解可以使用的内容,而不是对其进行更改!), CompiledMethod
和SystemOrganization
。
显然,该示例使用类别(我假设这就是包的意思?)“ Collections-Arrayed”,但您当然可以对其进行修改以使其成为方法参数,例如:
MyUtilClass unimplementedMessageSendsFor: aCategorySymbol
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.