我已经使用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可以正常编译。