如果类的实现在 Smalltalk 中至少出现两次“断言”一词,我想获取类的方法列表。
有人可以帮我吗?提前致谢!
我不确定 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。