我正在使用Java 8语法,当it.hasNext()
是it
时,我希望找到方法调用的出现,更具体地说是Iterator
。
这有效:
visit(unit) {
case (MethodInvocation)`it . <TypeArguments? ta> hasNext()`: {
println("found");
}
}
理想情况下,我希望与任何标识符匹配,而不仅仅是it
。
所以我尝试使用字符串插值,它编译但不匹配:
str iteratorId = "it";
visit(unit) {
case (MethodInvocation)`$iteratorId$ . <TypeArguments? ta> hasNext()`: {
println("achei");
}
}
我还尝试了其他几种方法,包括模式变量使用(如docs中所示),但我无法使用它。
这种匹配在流氓中是否可行?如果是的话,怎么办呢?
答案 0 :(得分:1)
答案具体取决于您使用的语法,我没有查找,但通常在具体的语法片段中,这种表示法用于占位符:<NonTerminal variableName>
因此,您的模式应如下所示:
str iteratorId = "it";
visit(unit) {
case (MethodInvocation)`<MethodName name>.<TypeArguments? ta>hasNext()`:
if (iteratorId == "<name>") println("bingo!");
}
假设MethodName
确实是Java8语法中的非终结符,并且是方法调用的语法规则的一部分。