Stringtemplate - 使用条件语句而不在输出中添加换行符,并且仍然保持模板清晰易读?
Stringtemplate - use conditionals without adding newlines to the output, and still keep templates legible?
我有这样的东西:
properties(attributeInfo) ::= <<
private <attributeInfo:parameters()>;
>>
parameters(attributeInfo) ::= <<
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()><else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName><endif>
>>
这会产生所需的输出:
private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj;
private String officeName;
private String officeAddress;
private String officeCity;
private String officeState;
private String officeZipcode;
private MlsPhoneTbl phoneTbl;
private String agentEmail;
private String agentAddress;
private String agentCity;
private String agentState;
private String agentZipcode;
当我将 parameters
子模板更改为以下内容时:
parameters(attributeInfo) ::= <<
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()>
<else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName>
<endif>
>>
模板更清晰,但输出现在包括换行符:
private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj
;
private String officeName
;
private String officeAddress
;
private String officeCity
;
private String officeState
;
private String officeZipcode
;
private MlsPhoneTbl phoneTbl
;
private String agentEmail
;
private String agentAddress
;
private String agentCity
;
private String agentState
;
private String agentZipcode
;
我对这种行为感到困惑 - 根据我对如何有条件地包含子模板的理解,以及条件 WRT 到换行符的行为,parameters
子模板的两种形式应该产生相同的输出.
显然我的理解不正确,所以我希望有人能给我一些指导。
尝试:
parameters(attributeInfo) ::= <%
<if(attributeInfo.struct||attributeInfo.array>
<attributeInfo:paramComposite()>
<else><javaTypeNameMap.(attributeInfo.typeName)>
<attributeInfo.propertyName>
<endif>
%>
<% ...%>
让字符串模板忽略分隔白色 space。 << ...>>
仅忽略前导和尾随换行符。
在某些情况下,调用函数 trim
也会有所帮助。
我有这样的东西:
properties(attributeInfo) ::= <<
private <attributeInfo:parameters()>;
>>
parameters(attributeInfo) ::= <<
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()><else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName><endif>
>>
这会产生所需的输出:
private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj;
private String officeName;
private String officeAddress;
private String officeCity;
private String officeState;
private String officeZipcode;
private MlsPhoneTbl phoneTbl;
private String agentEmail;
private String agentAddress;
private String agentCity;
private String agentState;
private String agentZipcode;
当我将 parameters
子模板更改为以下内容时:
parameters(attributeInfo) ::= <<
<if(attributeInfo.struct||attributeInfo.array)><attributeInfo:paramComposite()>
<else><javaTypeNameMap.(attributeInfo.typeName)> <attributeInfo.propertyName>
<endif>
>>
模板更清晰,但输出现在包括换行符:
private com.terradatum.common.db.model.terradatum.MlsAgentIdObj agentObj
;
private String officeName
;
private String officeAddress
;
private String officeCity
;
private String officeState
;
private String officeZipcode
;
private MlsPhoneTbl phoneTbl
;
private String agentEmail
;
private String agentAddress
;
private String agentCity
;
private String agentState
;
private String agentZipcode
;
我对这种行为感到困惑 - 根据我对如何有条件地包含子模板的理解,以及条件 WRT 到换行符的行为,parameters
子模板的两种形式应该产生相同的输出.
显然我的理解不正确,所以我希望有人能给我一些指导。
尝试:
parameters(attributeInfo) ::= <%
<if(attributeInfo.struct||attributeInfo.array>
<attributeInfo:paramComposite()>
<else><javaTypeNameMap.(attributeInfo.typeName)>
<attributeInfo.propertyName>
<endif>
%>
<% ...%>
让字符串模板忽略分隔白色 space。 << ...>>
仅忽略前导和尾随换行符。
在某些情况下,调用函数 trim
也会有所帮助。