计算模板表达式中的值

时间:2016-01-21 10:42:44

标签: templates xtend

我想在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»。但我希望上面的表达式只是计算,而不是打印出来。

什么是解决这个问题的最佳解决方案?

2 个答案:

答案 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