<element>_has_next 是遗留的 Freemarker 语法吗?

Is <element>_has_next a legacy Freemarker syntax?

在 freemarker 文档中发现了以下行,用于检查是否有更多元素:

<#list myList as myVar>...<#if myVar_has_next>...</#if></#list>

我知道“?”用于调用内置函数,以及关于 "has_next",即 myVar?has_next。我不熟悉在 var 和内置变量之间使用下划线。这是遗留语法吗?

这似乎是一个未记录的功能。 freemarker.core.IteratorBlock 中的相关代码表明 myVar_has_next 实际上只是一个变量的名称。但是因为代码检查附加到循环变量名称 (myVar) 的 _has_next(和 _index,fwiw)的出现,Freemarker 能够为这个变量赋值。

至少在 Freemarker 2.3.23 中,我无法重现您提到的错误。下面的代码虽然使用了 myVar?has_next

但工作正常
public static void main(String[] args) throws IOException, TemplateException {
    Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

    Template template = new Template("test", "<#list myList as myVar>${myVar} <#if myVar?has_next>has next. </#if></#list>", cfg);
    template.process((Object) Collections.singletonMap("myList", Arrays.asList("a", "b", "c")), new OutputStreamWriter(System.out));
}

生产

a has next. b has next. c 

编辑:v2.3.23 中的此功能has been deprecated(参见@ddekany 的评论)