Ошибка компиляции при использовании оператора модуля в MarkupTemplateEngine - PullRequest
0 голосов
/ 15 октября 2019

Я использую шаблонный движок 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 очень хорошо компилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...