gpt4 book ai didi

java - StringTemplate4 和匿名模板

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:18 24 4
gpt4 key购买 nike

我最近遇到问题 released beta version of Stringtemplate 4 .

在 StringTemplate 3 中,我曾经有这样的模板

<env_vars:{ var | void* <var>() { return null; }}>

即包含文字右括号 ("}") 的匿名模板,这些模板在 ST3 中运行良好,无需转义第一个右括号。

使用 ST4,我得到了一个 NPE(下面的测试用例打印了堆栈跟踪)。我可以通过转义右文字大括号来让它工作,所以模板看起来像这样(注意第一个右大括号前面的引号反斜杠):

<env_vars:{ var | void* <var>() { return null; \}}>

但是好像有点丑;我一直很欣赏 ST 的非侵入式语法,并且必须将要输出的每个“{”与相应的“\}”进行匹配,这在某种程度上似乎非常不对称。

我是否遗漏了什么,或者这是 ST3 的预期行为变化?

测试用例:

import org.stringtemplate.v4.ST;public class ST4Test{  public static void main(final String[] args)  {    final String[] env_vars = new String[]{"one", "two", "three"};    try    {      // This used to work in ST3, but fails in ST4.      final ST failingST = new ST("<env_vars:{ var | void* <var>() { return null; }}\n>");      failingST.add("env_vars", env_vars);      System.out.printf("%s\n", failingST.render());    }    catch (Exception ex)    {      // The failing example results in a NPE      ex.printStackTrace();    }    // This works, but requires quoting the "}" contained within the anonymous    // template, which I find a bit disturbing, considering that I use ST for    // generating C-code, which tends to use the occasional "}", along with the    // fact that this used to work in ST3.    final ST workingST = new ST("<env_vars:{ var | void* <var>() { return null; \\}\n}>");    workingST.add("env_vars", env_vars);    System.out.printf("%s\n", workingST.render());  }}

最佳答案

我明白了

测试 1:44:无效字符 '}'

你确定这在 ST3 中有效吗?里面的 } 匹配但是,像引号一样,第一个 } 应该终止模板。 ST 根本不应解释模板内的文本。这个怎么样?

<env_vars:{ var | void* <var>() {{{{{{{{{{{ return null; }>

那应该可行,但如果我查看 { inside.可能是您生成的 head not complete func,对吧?

听起来 v3 有一个错误! ;)

关于java - StringTemplate4 和匿名模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com