Recursion 为什么这个闭包调用没有';不会以递归调用结束?

Recursion 为什么这个闭包调用没有';不会以递归调用结束?,recursion,groovy,closures,Recursion,Groovy,Closures,我是Groovy新手,我正在研究官方文档中的闭包。给出以下示例: 因此,在数字5中,我知道delegate默认设置为owner,在这种情况下是封闭闭包封闭的 那么,为什么打电话 { -> delegate }.call() 在封闭的内部闭包不会以递归调用结束吗?在我看来,这是一个递归,但如果你运行代码,这不是一个递归。我错过了什么 def enclosed = { // delegate == owner == enclosed (variable) { ->

我是Groovy新手,我正在研究官方文档中的闭包。给出以下示例:

因此,在数字5中,我知道delegate默认设置为owner,在这种情况下是封闭闭包
封闭的

那么,为什么打电话

{ -> delegate }.call()
在封闭的
内部
闭包不会以递归调用结束吗?在我看来,这是一个递归,但如果你运行代码,这不是一个递归。我错过了什么

def enclosed = {
    // delegate == owner == enclosed (variable)
    { ->
        // When this closure is called return the delegate (enclosed) 
        delegate 
    }.call() // Called immediately                          

    // above closure is same as writing
    // return delegate
}

// When enclosed in called the delegate is returned immediately
// from the invocation of the inner closure, hence the result of the 
// closure call is the closure (delegate) itself
assert enclosed() == enclosed
请记住,在调用
included()
之前,在
included()内发生的任何事情都不会发生。:)它现在描绘了一幅清晰的画面吗


请记住,在调用
included()
之前,在
included()内发生的任何事情都不会发生。:)它现在描述了一个清晰的画面吗?

调用
{->delegate}.call()
封闭的
闭包中不会导致递归调用,因为
调用()
是在不同的闭包上调用的;在所附的
中创建的一个。要获取递归调用,可以执行以下操作:
{->delegate}.call().call()
。第一个
call()
返回
included
,第二个调用它。

调用
{->delegate}.call()
闭包中的
不会导致递归调用,因为
call()
是在不同的闭包上调用的;在所附的
中创建的一个。要获取递归调用,可以执行以下操作:
{->delegate}.call().call()
。第一个
call()
返回
封闭的
,第二个调用它。

你能在回答中加入@Emmanuel Rosa在他的回答中所做的观察吗,对于递归调用,我们需要
{->delegate}.call().call()
?我认为这对这个问题非常重要。谢谢我会同意,但我觉得这与最初提出的问题无关。问题是“我错过了什么?”。答案是理解闭包是如何工作的。毫无疑问,.call().call()将导致递归,但整个代码块将毫无意义。此外,除了查看代码外,如何确保.call()返回一个
闭包
,在此基础上可以再次调用.call()。最好先检查.call()
instanceof
Closure,然后检查make.call()。如果我能在这方面帮助你,我会很高兴。你能在你的回答中加入@Emmanuel Rosa在他的回答中所做的观察,即对于发生的递归调用,我们需要
{->delegate}.call().call()
?我认为这对这个问题非常重要。谢谢我会同意,但我觉得这与最初提出的问题无关。问题是“我错过了什么?”。答案是理解闭包是如何工作的。毫无疑问,.call().call()将导致递归,但整个代码块将毫无意义。此外,除了查看代码外,如何确保.call()返回一个
闭包
,在此基础上可以再次调用.call()。最好先检查.call()
instanceof
Closure,然后检查make.call()。如果我能在这方面帮助你,我很高兴。