我有以下关闭:
def deepSave = {
it.attributes.each{it.save(validate: false)}
it.elements.each{deepSave(it)}
it.save(validate: false)
}
我称之为:
deepSave(someObject.rootElement)
这失败了,堆栈跟踪太长了,它填满了PowerShell的缓冲区,所以我看不出原因是什么。
我使用下面的方法执行与尝试使用闭包相同的操作并且它工作正常。为什么闭合不起作用?
private def deepSave(def someElement) {
for(attribute in someElement.attributes) {
attribute.save(validate: false)
}
for(element in someElement.elements) {
deepSave(element)
}
someElement.save(validate: false)
}
答案 0 :(得分:1)
我不确定您正在进行递归的场景的有效性,但是当您使用closure
进行递归时,必须在定制变量之前预先定义变量,以便它可以在递归。例如:
def deepSave
deepSave = {
it.attributes.each{it.save(validate: false)}
it.elements.each{deepSave(it)}
it.save(validate: false)
}
我无法从递归中找出退出策略,但如果您可以详细说明上下文并添加一个破坏样本来运行,我可以添加更多内容。