2016-11-04 5 views
1

Java 8 문법으로 작업하고 있는데, itIterator 일 때 it.hasNext() 인 메서드 호출 발생을 찾고 싶습니다.구체적인 구문 매칭의 보간

이 작동 :

visit(unit) { 
    case (MethodInvocation)`it . <TypeArguments? ta> hasNext()`: { 
     println("found"); 
    } 
} 

가 이상적으로 나는 단지 it, 어떤 식별자와 일치하고 싶습니다.

그래서 나는 컴파일하지만 일치하지 않는 문자열 보간, 사용하여 시도 : 나는 또한합니다 ( docs에서와 같이) 패턴 변수 사용 등 여러 가지 다른 방법을 시도

str iteratorId = "it"; 
visit(unit) { 
    case (MethodInvocation)`$iteratorId$ . <TypeArguments? ta> hasNext()`: { 
     println("achei"); 
    } 
} 

을하지만 난 얻을 수 없다 이게 작동합니다.

이런 종류의 일치가 불량품입니까? 그렇다면 어떻게 할 수 있습니까?

대답은 특히 I가 보이지 않았다 사용하는 문법에 의존하지만, 구체적인 구문 조각에서 일반적으로이 표기법이 자리에 사용됩니다

답변

1

: <NonTerminal variableName>

그래서 패턴은 다음과 같이 보일 것이다 : MethodName 실제로 Java8하여 문법 및 메쏘드 호출을위한 문법 규칙의 일부에 비 단말기 인 것으로 가정한다

str iteratorId = "it"; 
visit(unit) { 
    case (MethodInvocation)`<MethodName name>.<TypeArguments? ta>hasNext()`: 
     if (iteratorId == "<name>") println("bingo!"); 
} 

.