我有一个元组列表,我需要从:
发出一个类似C的布尔表达式ranges = [('a','z'),('0','9'),('_','_')]
我的模板:
"$ranges:{'$it.0$'<=c&&c<='$it.1$'}; separator='||'$"
此输出:
'a'<=c&&c<='z'||'0'<=c&&c<='9'||'_'<=c&&c<='_'
我想检查$it.0$
是否与$it.1$
相同,并在这种情况下输出c==='$it.0$'
(在我的示例中,这将为最后一个元组生成c==='_'
。这可能吗?
答案 0 :(得分:0)
您无法在模板中进行任何计算(请参阅Stringtemplate compare strings does not work)。
解决这个问题的一种可能方法是使用自定义Range类,并将功能存储在其中。然后,您可以在范围对象上调用一个方法,该方法返回from
和to
值是否相等。
$ranges:{ range | $if(range.fromToEqual)$c === '$range.from$'$else$'$range.from$' <= c && c <= '$range.to$'$endif$}; separator=" || "$
其中Range类中的方法如下:
public boolean getFromToEqual() { // note the 'get' prefix
return from == to;
}
输出:
'a' <= c && c <= 'b'||'1' <= c && c <= '9'|| c === '_'