1
如何列出包中所有未實現的方法?假定該方法應該在該包中實現,而不是其他(例如在包或對象外的超類中)。Pharo和Squeak Smalltalk:在包中列出未實現的方法?
編輯:是的,我想知道,但在分析限制在一個特定的給定的包,爲前「未實現的已發送郵件」:
了FooPackage unimplementedMessageSends。
如何列出包中所有未實現的方法?假定該方法應該在該包中實現,而不是其他(例如在包或對象外的超類中)。Pharo和Squeak Smalltalk:在包中列出未實現的方法?
編輯:是的,我想知道,但在分析限制在一個特定的給定的包,爲前「未實現的已發送郵件」:
了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
。
顯然這個示例使用類(我假設這是你的包是什麼意思?)「類別排列的」,當然你可以修改它,使該方法的參數,是這樣的:
MyUtilClass unimplementedMessageSendsFor: aCategorySymbol
我仔細閱讀了這個問題幾次,不知道你在問什麼。也許增加一個具體的例子將有助於 – 2012-01-05 19:21:05
我也不明白這個問題。也許作者想知道發送的_messages沒有實現_?或者,也許他想知道具有_undefined子類responsabilities_的方法?這兩個問題都可以在CodeCritics中找到,它是重構引擎的一部分。 – 2012-01-05 19:28:39