0

我有以下关闭:

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)
}
4

1 回答 1

2

我不确定您正在执行递归的场景的有效性,但是当您closure用于递归时,必须在对其进行定制之前预先定义变量,以便它可以在递归期间了解自身。例如:

def deepSave
deepSave = {
    it.attributes.each{it.save(validate: false)}
    it.elements.each{deepSave(it)}
    it.save(validate: false)
}

我无法从递归中找出退出策略,但是如果您可以详细说明上下文并添加要运行的中断示例,我可以添加更多内容。

于 2013-10-24T02:14:53.580 回答