2014-02-08 3 views
1

StringTemplate v3에서 제공된 해시 맵 조회를 수행하는 대신 제공된 키에서 함수를 호출하고 함수 결과를 반환하는 사용자 정의 Java HashMap 구현이있었습니다. 이 HashMap의 인스턴스를 특성으로 stringtemplate에 추가합니다. 이렇게하면 StringTemplate에 사용자 정의 함수를 작성할 수 있습니다. +는 제안 된 변경이 V4에서 더 이상 가능하지 않고, 함께stringtemplate v4에서 사용자 정의 함수 구현

$myfunc.("argument")$ 

$somearray:{ v | 
    $myfunc.("value: " + v)$ 
}$ 

이 myfunc의 HashMap를 여기에 입력 한 문자열

문자열 연결의 핵심을 얻을 것입니다 : 우리는 같은 부를 것이다 익명 템플릿에 "value"+ v를 만드는 것입니다 :

$somearray:{ v | 
    $myfunc.({value: $v$})$ 
}$ 

이 경우 ST 개체는 다음과 같습니다. HashMap에 전달되고, 보통 render()를 호출하여 보통 얻을 텍스트를 생성 할 수 있지만 'v'속성은 더 이상 주변 범위에서 전달되지 않습니다. 어떻게하면 ST 객체가 주변 범위 (ST)를 찾을 수 있습니까? 그래서 속성을 복사하여이 작업을 할 수 있습니까 ??

정말 우리가 큰 코드베이스를 가지고 있기 때문에

$somearray:{ v | 
    $myfunc.((v:{ v | value: $v$}))$ 
}$ 

에 코드를 변경하지 않으며, 이것은 매우 파괴적인 변화이다.

내가 원하는 것을 얻을 수있는 다른 방법이 있습니까? 문자열 인자를 가진 Java 함수를 호출하려고하고 문자열 인자가 둘러싸는 범위의 속성에 접근 할 수있는 표현식 인 템플릿에 값을 반환하도록하고 있습니다.

답변

0

당신은 당신의 템플릿 주위에 "문자열"연산자 (...)를 사용할 수 있습니다

$somearray:{ v | 
    $myfunc.(({value: $v$}))$ 
}$