我想在Xtend中计算模板表达式中的值,而不打印出来。
这是我的代码:
def generateTower(Tower in) {
var counter = 0.0;
'''
One Two Three Four
«FOR line : in.myTable»
«counter» «line.val1» «line.val2» «line.val3»
«counter = counter + 1»
«ENDFOR»
'''
}
因此,这将生成一个包含四列的表,而第一列从0.0开始递增。问题是,也会打印«counter = counter + 1»
。但我希望上面的表达式只是计算,而不是打印出来。
什么是解决这个问题的最佳解决方案?
答案 0 :(得分:2)
您可以使用这个简单易读的解决方案:
«FOR line : in.myTable»
«counter++» «line.val1» «line.val2» «line.val3»
«ENDFOR»
如果您坚持使用单独的增量表达式,请使用带有null
值的块。这是因为null
值在模板表达式中转换为空字符串(当然您也可以使用""
):
«FOR line : in.myTable»
«counter» «line.val1» «line.val2» «line.val3»
«{counter = counter + 1; null}»
«ENDFOR»
虽然第一种解决方案更好。如果您在模板表达式中需要复杂的逻辑,我建议通过方法实现它,而不是通过内联代码实现...
最后,这是针对该问题的更多OO解决方案:
class TowerGenerator {
static val TAB = "\t"
def generateTower(Tower in) {
var counter = 0
'''
One«TAB»Two«TAB»Three«TAB»Four
«FOR line : in.myTable»
«generateLine(line, counter++)»
«ENDFOR»
'''
}
def private generateLine(Line line, int lineNumber) '''
«lineNumber»«TAB»«line.val1»«TAB»«line.val2»«TAB»«line.val3»
'''
}
答案 1 :(得分:0)
Xtend是一种成熟的编程语言。您可以编写类似Java的表达式和模板。问题在于你在三重引号(模板)中,你在那里写的所有内容都会被输出。您可以在循环内部计算,但考虑到您正在计算 <a class="btn_loadmore btn btn-lg btn-orange" href="dwfile?#templatemo-archives" target="_blank" role="button">DOWNLOAD MORE SCREENSHOTS</a>
集合中的元素,这可以使用in.myTable
获得。因此,in.myTable.length
可以预先计算为count
。