簡體   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