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”时,递归停止了-基本上,它只是保存一些内容,直到没有更多的树可以递归为止。我想知道这里唯一的问题是缺少预定义变量。