【问题标题】:Generating and consuming an array within a StringTemplate-4 template在 StringTemplate-4 模板中生成和使用数组
【发布时间】:2014-05-28 20:13:56
【问题描述】:

我是 StringTemplate4 的新手,我可能会问一些过于简单、不可能或愚蠢的问题,但我找不到任何其他信息。 到目前为止,我已经设置了这个最小的模板集:

define(name,arity) ::= "<name>(<vars(arity)>)."
vars(n) ::= "<n:var();separator=\", \">"
var(n) ::= "V<n>"

我想得到:

pred(V1, V2, V3).

通过调用以下代码:

STGroup group = new STGroupFile(...);
ST st = group.getInstanceOf("define");
st.add("name", "pred");
st.add("arity", 3);
String result = st.render();

有可能吗?非常感谢。

【问题讨论】:

    标签: stringtemplate-4


    【解决方案1】:

    StringTemplate 没有用于重复的内置运算符。相反,您需要迭代,如以下问题中所述。

    Is there anything like Enumerable.Range(x,y) in Java?

    请记住,由于 StringTemplate 中的当前限制(解释器支持Collection&lt;T&gt;,但不支持Iterable&lt;T&gt;),您需要传递Iterator&lt;T&gt; 而不是Iterable&lt;T&gt;。如果你想使用内置的迭代变量ii0,你也可以传递一个适当大小的new Object[n]

    【讨论】:

    • 嗨,山姆,非常感谢您的回复。由于没有重复的运算符,即使是简单的int v[] = {1, 2, 3} 也可以解决问题,但Iterator 可能需要一些小的编码但使用更少的内存......因为我可能不得不传递一个进一步的字符串数组在我的示例中,arity 正是n,我应该如何使用&lt;i&gt;&lt;i0&gt; 来生成我的变量序列?我能找到的唯一参考是here,我不太明白该怎么做……干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多