xTend:如何阻止变量在输出中打印?

时间:2013-08-23 17:58:49

标签: xtend

假设您在xTend中有以下代码:

class StackOverflowGenerator {
    def generate()'''
    «var counter = 0»
    «FOR i : 0 ..<10»
    Line Numnber: «i»
    «counter = counter + 1»
    «ENDFOR»
'''

}

这将以以下格式生成输出:

    Line Numnber: 0
    1
    Line Numnber: 1
    2
    Line Numnber: 2
    3
    Line Numnber: 3
    ...

如何让xTend不打印仅使用计数器的行,只打印行号以使输出如下:

Line Numnber: 0
Line Numnber: 1
Line Numnber: 2
Line Numnber: 3
...

3 个答案:

答案 0 :(得分:8)

在Xtend中,everything is an expression,所以«counter = counter + 1»评估分配的结果,这就是为什么它将成为字符串的一部分。因此,如果您真的想在模板表达式的for循环中执行副作用(强烈反对),请在块表达式中执行并返回空字符串或null:«{ counter = counter + 1; "" }»。然而,这不是太优雅,所以你可能想以另一种方式解决你的问题,正如其他答案所暗示的那样。

答案 1 :(得分:3)

在您的示例中,counter没有用处。所以很难猜出你真正的用例是什么。在大多数情况下,需要基于i进行一些计算,完全消除counter。 Orionll的回答指向了这个方向。

但是,如果counter是无法从i计算但是某些累积状态的东西,那么最简单的方法是将该状态提取到自定义类中并使用{{1}修改此状态}} 方法。在此示例中,使用了生成的void方法。

void setCounter(int)

答案 2 :(得分:1)

«var counter = 0»
«FOR i : 0 ..<10»
Line Number: «counter = i»
«ENDFOR»