1

我有一个元组列表,我需要从以下位置发出类似 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==='_'

4

1 回答 1

0

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

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

$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 === '_'
于 2015-08-07T14:05:10.110 回答