Xtend 中的 While 循环

问题描述 投票:0回答:2

我已经用java编写了一段代码,现在我必须将其转换为Xtend模板。不过我用 while 循环写了以下内容。

index = refin.size()-1
                    while (index > 0){
                          System.out.println(refin.get(index) + "::=" + refin.get(index-1))
                          index-=2
                        }

现在我发现Xtend模板不支持WHILE,而且我也无法编写以下内容:

«FOR index : refin.size()-1 ; index >= 0 ; index -=2»

关于如何使用 while 循环(或类似的东西)来完成与我在 Xtend 模板中所做的相同的事情,有什么想法吗?

非常感谢!

java eclipse while-loop xtend
2个回答
0
投票

对我来说效果很好

val String[] refin = #["1", "a", "2", "b", "3", "c"]
var index = refin.size - 1
while(index > 0) {
    println(refin.get(index) + "::=" + refin.get(index -1))
    index -= 2
}

// c::=3
// b::=2
// a::=1

0
投票

您是对的,Xtend 在模板表达式中既不支持 for 循环,也不支持 while 循环。模板中仅支持 for-each 样式循环。您当然可以将整个模板字符串移动到常规循环中,但您可能会失去模板字符串的一些好处。 最好的选择是将 for 循环重写为可迭代范围内的 foreach 循环。

对于步长为

1

-1
的常见情况,您可以使用范围运算符。要么像
0 ..< list.size
一样包含向前迭代,要么像
refin.size >.. 0
那样向后迭代,例如:
val String result = '''
    «FOR i : list.size >.. 0»
        «i»
    «ENDFOR»
'''

在步长为 
-2

的情况下,您不能使用范围运算符,但可以使用

org.eclipse.xtext.xbase.lib.IntegerRange
代替,它允许您定义步长:
val String[] refin = #["1", "a", "2", "b", "3", "c"]
val String result = '''
    «FOR i : new IntegerRange(refin.size-1, 0, -2)»
        «refin.get(i)»::=«refin.get(i - 1)»
    «ENDFOR»
'''

© www.soinside.com 2019 - 2024. All rights reserved.