我刚刚开始学习字符串模板,我遇到了这里显示的例子:
group simple;
vardef(type,name) ::= "<type> <name>;"
method(type,name,args) ::= <<
<type> <name>(<args; separator=",">) {
<statements; separator="\n">
}
>>
我想要做的是将stringtemplate作为参数传递给方法stringtemplate,如下所示:
statements(function, arguments) ::= <<
<function>(<arguments; separator=",">);
>>
method(type,name,args, <statements> ) ::= <<
<type> <name>(<args; separator=",">) {
<statements; separator="\n">
}
>>
然而,这没有成功,所以我猜它不可能将stringtemplates传递给stringtemplates? 然后如何填充语句?
尝试此操作时出现以下错误:
mytemplate.stg 14:26: invalid character '<'
mytemplate.stg 14:36: invalid character '>'
答案 0 :(得分:2)
我正在使用带有C#的stringtemplate 4,并且在创建通用“Delimit”模板时遇到了同样的问题,该模板将接受作为参数的集合,每个项目上的地图操作(匿名模板)和分隔符(也是匿名模板)。模板参数工作,但我无法使参数传递机制工作;相反,我不得不依赖动态范围和调用者上下文中存在的变量命名项。
NormalGet(schema, table) ::= <<
CREATE PROCEDURE [<schema.Name>].[Get<table.Name>]
<Delimit(items = table.Cols, itemTransformer = {@<item.Name> <item.ListType> readonly}, delimiter = ",\n")>
AS
BEGIN
END
>>
和Delimit:
Delimit(items, itemTransformer, delimiter) ::= <<
<trunc(items): { item | <itemTransformer><delimiter>} ><last(items): { item |<itemTransformer> } >
>>
给了我类似的东西:
CREATE PROCEDURE [data].[GetCluster]
@idCluster common.intList readonly,
@Name common.varcharList readonly,
@Category common.varcharList readonly,
@DisplayOrder common.intList readonly,
@IsEditable common.bitList readonly
AS
BEGIN
END
我想做的是用以下内容替换我对Delimit的调用:
<Delimit(items = table.Cols, itemTransformer = {col | @<col.Name> <col.ListType> readonly}, delimiter = ",\n")>
但我无法弄清楚它的语法,或者甚至可能。