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