2011-02-15 3 views
31

, 나는이 할 수있는 : 속도에 반해Velocity에서 인라인 if/otherwise (일명 삼항 연산자)를 수행하는 방법은 무엇입니까? 순수 자바에서

value = (a > b) ? a : b; 

을, 긴 형태는 다음과 같습니다

#if($a > $b)   
    #set($value = $a) 
#else 
    #set($value = $b) 
#end 

속도에 짧은 형식이 있습니까? 나는 if/otherwise inline을 할 수 있기를 바란다. 당신은 재사용 가능한 매크로 접근 방식도있다

#set($value = "#if($flag)red#{else}blue#end") 

답변

38

:

#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end 

그런 다음

#define ($value) 
#iif("$a > $b", $a, "$b") 
#end 

참고 속도 문서는 명시 것을 매크로를 사용하여 약간의 성능에 미치는 영향을 포함한다는 .

+0

나는 귀하의 솔루션을 시도하고 효과가있었습니다. 그러나 #set 지시문이 필요하다는 것이 이상하게 보였습니다. 따라서 "# {else}"문서를 검색하여 명확하게 문서화 된 개념을 발견했습니다. 이해하기 쉽지만 알아 차리기는 어렵습니다. – KSev

11

#macro 또는 #set 지시어는 필요하지 않습니다. 열쇠는 #else 지시문에 중괄호를 사용하고 있습니다. (거의 조건문 섹션의 끝) doc에서

#if($plural)were#{else}was#end 

:

하나 더 유용한 참고. #else 지시문 바로 뒤에 텍스트를 포함 시키려면 지시문을 둘러싼 중괄호를 사용하여 다음 텍스트와 구별해야합니다. (#else에 가장 유용하지만 지시어는 중괄호로 구분할 수 있습니다.)

참고 :에 관계없이 문서의 말씀의 난 이후 간단한 인라인 if 문을 사용하는 경우 중괄호를 추가 할 필요가있을 수 있다는 것을 발견했다.

#if($includePrefix)Affected #{end}Inspection 
관련 문제