1

如果类的实现在 Smalltalk 中至少出现两次“断言”一词,我想获取类的方法列表。

有人可以帮我吗?提前致谢!

4

1 回答 1

4

我不确定 gnu-Smalltalk 的详细信息,但是在 Pharo 中,您可以执行以下操作:

YourClass methods select: [ :method |
    method sourceCode matchesRegex: '.*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。

于 2020-11-09T01:47:03.583 回答