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

Groovy 在MarkupTemplateEngine中使用模数运算符时发生编译错误,groovy,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

我已经使用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)
            }
        }
    }
}
def isEven(n){n%2==0}
def项目=[“零”、“一”、“二”]
“屈服”的
html(lang:'en'){
身体{
保险商实验室{
items.eachWithIndex{item,i->
if(i)(i)li(项目)
}
}
}
}
下面是一个如何呈现模板的示例

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());     
TemplateConfiguration config=new TemplateConfiguration();
MarkupTemplateEngine=新的MarkupTemplateEngine(配置);
Template Template=engine.createTemplate(新文件('test.tpl').newReader());
映射模型=新的HashMap();
可写输出=template.make(model);
output.writeTo(新文件('test.html').newWriter());

将isEven方法更改为使用Number.mod编译效果很好。

我不知道这与
MarkupTemplateEngine
有什么关系,也不知道在什么上下文中定义了
isEven
方法。上的代码似乎有效。你能提供更多的上下文或信息来帮助重现问题吗?哪个模板引擎?您是否有一个简短的自包含示例来显示错误?它与MarkupTemplateEngine有关,因为这是我触发错误时使用的。我的根本问题是,在模板中的任何位置使用模运算符都会抛出错误,而在Groovy SDK中使用Number.mod方法的效果与预期的一样。isEven只是说明了工作与否的区别。%符号显然导致了某种预处理错误,但我不确定MarkupTemplateEngine文档中没有提到的是什么(尽管GStringTemplateEngine确实使用样式处理,所以可能是相关的?@tim_yates示例添加在编辑中)