我需要比较 StringTemplate 中的 属性 值

I need to compare property values in StringTemplate

我有一个元组列表,我需要从中发出类似 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==='_'元组)。这可能吗?

您不能在模板中进行任何计算(请参阅 Stringtemplate compare strings does not work)。

解决此问题的一种可能方法是使用自定义范围 class,并将功能存储在其中。然后,您可以在返回 fromto 值是否相等的范围对象上调用一个方法。

$ranges:{ range | $if(range.fromToEqual)$c === '$range.from$'$else$'$range.from$' <= c && c <= '$range.to$'$endif$}; separator=" || "$

其中范围class中的方法如下:

public boolean getFromToEqual() { // note the 'get' prefix
    return from == to;
}

输出:

'a' <= c && c <= 'b'||'1' <= c && c <= '9'|| c === '_'