Groovy 为什么不是';这封信行得通吗?
我的结论如下:Groovy 为什么不是';这封信行得通吗?,groovy,Groovy,我的结论如下: def deepSave = { it.attributes.each{it.save(validate: false)} it.elements.each{deepSave(it)} it.save(validate: false) } 我这样称呼它: deepSave(someObject.rootElement) 这会失败,stacktrace太长,它会填满PowerShell的缓冲区,所以我看不出原因是什么 我用下面的方法做了与我试图用闭包做的
def deepSave = {
it.attributes.each{it.save(validate: false)}
it.elements.each{deepSave(it)}
it.save(validate: false)
}
我这样称呼它:
deepSave(someObject.rootElement)
这会失败,stacktrace太长,它会填满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)
}
我不确定执行递归的场景的有效性,但当使用
闭包
进行递归时,必须先预定义变量,然后再对其进行定制,以便在递归过程中了解其自身。例如:
def deepSave
deepSave = {
it.attributes.each{it.save(validate: false)}
it.elements.each{deepSave(it)}
it.save(validate: false)
}
我无法从递归中找出退出策略,但如果您能够详细说明上下文并添加一个中断的示例来运行,我可以添加更多的退出策略。当不再有任何子元素被调用为“deepSave”时,递归停止了-基本上,它只是保存一些内容,直到没有更多的树可以递归为止。我想知道这里唯一的问题是缺少预定义变量。