方法列表,如果它们的实现在Smalltalk中至少出现两次“assert”一词

方法列表,如果它们的实现在Smalltalk中至少出现两次“assert”一词,smalltalk,pharo,gnu-smalltalk,pharo-5,Smalltalk,Pharo,Gnu Smalltalk,Pharo 5,我想得到一个类的方法列表,如果它们的实现在Smalltalk中至少出现两次“assert”一词 有人能帮我吗?提前谢谢 我不确定gnu Smalltalk的细节,但在Pharo中,您可以这样做: YourClass methods select: [ :method | method sourceCode matchesRegex: '.*assert.*assert.*'. ] 这里,我使用一个普通的正则表达式来查看是否可以匹配源代码中的两个断言词 然而,使用Smalltalk,很容

我想得到一个类的方法列表,如果它们的实现在Smalltalk中至少出现两次“assert”一词


有人能帮我吗?提前谢谢

我不确定gnu Smalltalk的细节,但在Pharo中,您可以这样做:

YourClass methods select: [ :method |
    method sourceCode matchesRegex: '.*assert.*assert.*'. ]
这里,我使用一个普通的正则表达式来查看是否可以匹配源代码中的两个断言词

然而,使用Smalltalk,很容易进行更精确的搜索。如图所示,您希望查看一个方法是否至少发送两条assert:messages。您可以通过以下方式找到此类方法:

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

在上面的示例中,对于每个方法,我们只需计算作为消息发送的AST节点的数量,并使用assert:selector。然后我们检查这些节点的数量是否大于或等于2。

我不确定gnu Smalltalk的详细信息,但在Pharo中,您可以这样做:

YourClass methods select: [ :method |
    method sourceCode matchesRegex: '.*assert.*assert.*'. ]
这里,我使用一个普通的正则表达式来查看是否可以匹配源代码中的两个断言词

然而,使用Smalltalk,很容易进行更精确的搜索。如图所示,您希望查看一个方法是否至少发送两条assert:messages。您可以通过以下方式找到此类方法:

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

在上面的示例中,对于每个方法,我们只需计算作为消息发送的AST节点的数量,并使用assert:selector。然后我们检查这些节点的数量是否大于或等于2。

谢谢您的回复。让我更清楚一点。我想“找到isVariable设置为true且至少包含两次断言语句的每个方法”。你能帮我吗…@HarikaPutta什么是变量?那是临时变量吗?另外,如果你说的是动态值,这个真值是在其他地方设置的,或者来自其他一些计算,这将是困难的,不精确的,尽管不是不可能的。如果您想找到代码为isVariable:=true的方法,那么我可以帮您一把谢谢您的回复。让我更清楚一点。我想“找到isVariable设置为true且至少包含两次断言语句的每个方法”。你能帮我吗…@HarikaPutta什么是变量?那是临时变量吗?另外,如果你说的是动态值,这个真值是在其他地方设置的,或者来自其他一些计算,这将是困难的,不精确的,尽管不是不可能的。如果您想找到代码为isVariable:=true的方法,那么我可以帮助您