下面是一段Groovy代码:
import groovy.xml.StreamingMarkupBuilder;
def processData() {
// xml builder
def xmlBuilder = new StreamingMarkupBuilder()
xmlBuilder.encoding = 'UTF-8'
// data
def body = [1, 2, 3]
flag = '0'
def idocXML = xmlBuilder.bind {
ROOT {
body.each { line ->
flag = '1'
}
}
}// end of xml builder bind
println("$flag")
}
processData()
字符串
在代码片段中,processData内部有一个变量flag,初始化为0,在xmlBuilder.bind和body的迭代中,我将flag更新为1。但是在这些闭包之外,当我打印flag时,它显示为0。
如何从身体内部将标志更新为1。每个封闭?谢谢
1条答案
按热度按时间7uzetpgm1#
您的代码通常是正确的,并且会做它应该做的事情。问题是,这个
bind
闭包被声明了,但实际上从未被调用。您声明了XML应该如何构造,但您从未“触发”构造本身。让我向您展示我的意思以及我是如何发现它的。我的第一个问题是,这flag = '1'
行是否被执行了?我通过添加额外的输出更改了代码:字符串
正如你所看到的,它什么也不打印。为什么?因为,正如我上面写的,你描述了你的
idocXML
对象必须如何构造,但你从来没有使用过这个对象。这就是为什么这个绑定闭包从来没有被调用过。下面是按预期工作的代码:型
希望能帮上忙。