如何让 Xtend 中的 AFTER 分隔符紧跟在最后一项之后
How to have the AFTER separator in Xtend just behind last item
我使用 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,
求高手帮忙!
在您的简单示例中,由于 SEPARATOR 和 AFTER 相同,您应该完全跳过 separator/after 内容,而只使用
'''
«FOR item : list»
«item»,
«ENDFOR»
'''
Xtend 的空白检测会跳过 FOR 和 ENDFOR 之后的换行符。问题是在执行循环后应用 AFTER,并且您的 loop-body 包含进入输出(灰色空间)的尾随换行符。您可以通过在一行中编写整个循环来克服这个问题,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«item»«ENDFOR»
'''
并在循环的 body 变长时提取一个方法。为了更好的可读性,您可以在 guillemets 中添加任意数量的空格,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«
item
»«ENDFOR»
'''
对于较小的身体,您也可以考虑使用 prefer join()
'''
«list.join(',\n')»,
'''
或更一般的 map()、reduce() 等等。
我使用 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,
求高手帮忙!
在您的简单示例中,由于 SEPARATOR 和 AFTER 相同,您应该完全跳过 separator/after 内容,而只使用
'''
«FOR item : list»
«item»,
«ENDFOR»
'''
Xtend 的空白检测会跳过 FOR 和 ENDFOR 之后的换行符。问题是在执行循环后应用 AFTER,并且您的 loop-body 包含进入输出(灰色空间)的尾随换行符。您可以通过在一行中编写整个循环来克服这个问题,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«item»«ENDFOR»
'''
并在循环的 body 变长时提取一个方法。为了更好的可读性,您可以在 guillemets 中添加任意数量的空格,例如
'''
«FOR item: list SEPARATOR ',\n' AFTER ',\n'»«
item
»«ENDFOR»
'''
对于较小的身体,您也可以考虑使用 prefer join()
'''
«list.join(',\n')»,
'''
或更一般的 map()、reduce() 等等。