簡體   English   中英

方法列表,如果它們的實現在 Smalltalk 中至少出現了兩次單詞“assert”

[英]List of methods if their implementation has at least two occurences of a word 'assert' in Smalltalk

我想獲取一個類的方法列表,如果它們的實現在 Smalltalk 中至少出現了兩個單詞“assert”。

有人可以幫我解決這個問題嗎? 提前致謝!

我不確定 gnu-Smalltalk 的詳細信息,但是在 Pharo 中,您可以執行以下操作:

YourClass methods select: [ :method |
    method sourceCode matchesRegex: '.*assert.*assert.*'. ]

這里我使用一個簡單的正則表達式來查看是否可以匹配源代碼中的兩個“assert”單詞。

但是,使用 Smalltalk,可以輕松進行更精確的搜索。 圖片,你想看看一個方法是否至少發送了兩個assert:消息。 您可以通過以下方式找到此類方法:

YourClass methods select: [ :method |
    | numAsserts |
    numAsserts := method ast allChildren count: [ :node |
        node isMessage and: [ node selector = #assert: ] ].
    numAsserts >= 2
]

在上面的例子中,對於每個方法,我們簡單地計算消息發送的 AST 節點的數量,並使用assert:選擇器。 然后我們檢查這些節點的數量是否大於或等於 2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM