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