在MarkupTemplateEngine中使用模数运算符时发生编译错误

时间:2019-10-15 05:38:50

标签: groovy

我已经使用Groovy模板引擎一年了,但是却遇到了一个奇怪的问题,我不确定自己是不是疯了,或者这是预期的行为。

所有条件都相同,当在Groovy模板中使用此函数时,会引发编译错误。

def isEven(n) { n % 2 == 0 }
  

类生成期间的一般错误:org.codehaus.groovy.ast.Parameter无法转换为org.codehaus.groovy.ast.expr.VariableExpression

但是如果我这样做的话...

def isEven(n) { n.mod(2) == 0 }

...一切正常。

我在文档中没有发现任何特殊情况,但是我可能会错过它。谁能提供一些有关此错误背后含义的见识,也许还会提供一些指导,以避免将来出现此类陷阱?

干杯,谢谢!

Groovy 2.5版

更新 这是引发错误的完整示例模板。

def isEven(n) { n % 2 == 0 }
def items = ["Zero", "One", "Two"]
yieldUnescaped '<!DOCTYPE html>'
html(lang:'en') {
    body {
        ul {
            items.eachWithIndex { item, i ->
                if(isEven(i)) li(item)
            }
        }
    }
}

这是模板呈现方式的示例。

TemplateConfiguration config = new TemplateConfiguration();         
MarkupTemplateEngine engine = new MarkupTemplateEngine(config);     
Template template = engine.createTemplate(new File('test.tpl').newReader());    
Map<String, Object> model = new HashMap<>();                        
Writable output = template.make(model);                             
output.writeTo(new File('test.html').newWriter());     

更改isEven方法以使用Number.mod可以正常编译。

0 个答案:

没有答案