模板表达式中的计数值
Count value in template expression
我想在 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»
'''
}
因此这将生成一个包含四列的 table,而第一列从 0.0 开始递增。问题是 «counter = counter + 1»
也被打印出来了。但是我希望上面的表达式只是计数,而不是打印出来。
解决这个问题的最佳方案是什么?
您可以使用这个简单易读的解决方案:
«FOR line : in.myTable»
«counter++» «line.val1» «line.val2» «line.val3»
«ENDFOR»
如果您坚持使用单独的 增量表达式 ,请使用具有 null
值的 块 。这是有效的,因为 null
值在 模板表达式 s 中被转换为空字符串(当然你也可以使用 ""
):
«FOR line : in.myTable»
«counter» «line.val1» «line.val2» «line.val3»
«{counter = counter + 1; null}»
«ENDFOR»
虽然第一种方案更好。如果您在 模板表达式 中需要复杂的逻辑,我建议通过 方法 而不是内联代码来实现它...
最后,这里有一个更面向对象的问题解决方案:
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»
'''
}
Xtend 是一种 full-fledged 编程语言。您可以编写 Java-like 表达式和模板。那里的问题是你在三重引号(模板)中,你在那里写的所有内容都会被输出。您可以在循环内计数,但要考虑到您正在对 in.myTable
集合中的元素进行计数,这可以使用 in.myTable.length
获得。所以 count
可以预先计算为 in.myTable.length
.
我想在 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»
'''
}
因此这将生成一个包含四列的 table,而第一列从 0.0 开始递增。问题是 «counter = counter + 1»
也被打印出来了。但是我希望上面的表达式只是计数,而不是打印出来。
解决这个问题的最佳方案是什么?
您可以使用这个简单易读的解决方案:
«FOR line : in.myTable»
«counter++» «line.val1» «line.val2» «line.val3»
«ENDFOR»
如果您坚持使用单独的 增量表达式 ,请使用具有 null
值的 块 。这是有效的,因为 null
值在 模板表达式 s 中被转换为空字符串(当然你也可以使用 ""
):
«FOR line : in.myTable»
«counter» «line.val1» «line.val2» «line.val3»
«{counter = counter + 1; null}»
«ENDFOR»
虽然第一种方案更好。如果您在 模板表达式 中需要复杂的逻辑,我建议通过 方法 而不是内联代码来实现它...
最后,这里有一个更面向对象的问题解决方案:
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»
'''
}
Xtend 是一种 full-fledged 编程语言。您可以编写 Java-like 表达式和模板。那里的问题是你在三重引号(模板)中,你在那里写的所有内容都会被输出。您可以在循环内计数,但要考虑到您正在对 in.myTable
集合中的元素进行计数,这可以使用 in.myTable.length
获得。所以 count
可以预先计算为 in.myTable.length
.