我使用Xtend从我的Xtext语法生成一些文本输出.我的问题很简单,但我无法弄清楚阅读文档和示例,所以请给我建议!
我们假设,我有一个包含一些项目的列表.我使用SEPARATOR功能为FOR循环中的每个项生成一行.最后我想使用AFTER有一个最后的分隔符.这是一个演示它的示例代码:
val list = #["a", "b", "c"]
'''
«FOR item : list SEPARATOR "," AFTER ","»
«item»
«ENDFOR»
'''
Run Code Online (Sandbox Code Playgroud)
这样,我收到以下输出:
a,
b,
c
,
Run Code Online (Sandbox Code Playgroud)
现在的问题是:如何让最后的,分隔符紧随其后c而不是新行?对我来说,正确格式化输出非常重要(它比a,b,c实际更复杂,并且分隔符的位置很重要).我想要这个:
a,
b,
c,
Run Code Online (Sandbox Code Playgroud)
专家,请帮忙!
小智 5
在你的简单例子中,由于SEPARATOR和AFTER是相同的,你应该完全跳过分隔符/后面的东西,然后使用
'''
«FOR item : list»
«item»,
«ENDFOR»
'''
Run Code Online (Sandbox Code Playgroud)
Xtend的空白检测会跳过FOR和ENDFOR之后的换行符.问题是在循环执行后应用了AFTER,并且循环体包含一个进入输出的尾随换行符(grayspace).您可以通过将整个循环写入一行来克服此问题,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«item»«ENDFOR»
'''
Run Code Online (Sandbox Code Playgroud)
并提取一个循环体变长的方法.为了更好的可读性,您可以在guillemets中添加任意数量的空格,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«
item
»«ENDFOR»
'''
Run Code Online (Sandbox Code Playgroud)
对于较小的身体,您也可以考虑更喜欢join()
'''
«list.join(',\n')»,
'''
Run Code Online (Sandbox Code Playgroud)
或更一般的map(),reduce().
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |