Groovy:当一个闭包';s";“业主”;这是另一个结束

Groovy:当一个闭包';s";“业主”;这是另一个结束,groovy,Groovy,我在Groovy中遇到了闭包的owner的概念,这让我很困惑,因此我编写了一个小程序来了解owner是如何工作的: def examineClosure(closure) { closure() } examineClosure() { println "$owner" examineClosure() { println "$owner" } } 但是,当我运行这段代码时,我得到了一个java.lang.StackOverflowerError,我

我在Groovy中遇到了闭包的
owner
的概念,这让我很困惑,因此我编写了一个小程序来了解
owner
是如何工作的:

def examineClosure(closure) {
  closure()
}
examineClosure() {
    println "$owner"
    examineClosure() {
        println "$owner"
    }
}
但是,当我运行这段代码时,我得到了一个
java.lang.StackOverflowerError
,我认为这是因为在内部闭包中计算
$owner
时,Groovy实际上是在外部闭包上隐式执行
.call()
。这是预期的行为吗?为什么结果会不一样呢

examineClosure() {
    println "$owner"
    examineClosure() {
        println "" + owner
    }
}
我的理解是,
“some var:$var”
只是Groovy对
“some var:+var

的缩写。使用Groovy的语法“$owner”的意思是:将“owner”变量值作为字符串插入“”部分

那是由于那次事故造成的

使用GString的示例如下:

String $outerValue = "groovy GString syntax"

"This is a String using $outerValue. it makes the String clear and more readable"."
因此,我不确定您与闭包部分相关的错误

不幸的是,你的假设:

我的理解是,“somevar:$var”只是Groovy “某些var:+var”的简写形式

这是错误的

在以下代码中:

examineClosure() {
    println "$owner"
    examineClosure() {
        println "" + owner
    }
}
变量所有者根本没有定义

这就是为什么会得到java.lang.StackOverflowerError。

使用Groovy的语法“$owner”的意思是:将“owner”变量值作为字符串插入“”部分

那是由于那次事故造成的

使用GString的示例如下:

String $outerValue = "groovy GString syntax"

"This is a String using $outerValue. it makes the String clear and more readable"."
因此,我不确定您与闭包部分相关的错误

不幸的是,你的假设:

我的理解是,“somevar:$var”只是Groovy “某些var:+var”的简写形式

这是错误的

在以下代码中:

examineClosure() {
    println "$owner"
    examineClosure() {
        println "" + owner
    }
}
变量所有者根本没有定义


这就是为什么会得到java.lang.StackOverflowerError。

变量
this
owner
委托
在Groovy中的任何闭包的范围内都是隐式定义的:但行:println”“+owner意味着owner是一个字符串或实现了toString()方法,因此可以将其打印到屏幕上。我在你的代码中没有看到任何实现。变量
this
owner
delegate
都是在Groovy中任何闭包的范围内隐式定义的:但行:println”“+owner意味着所有者是一个字符串或实现了toString()方法,因此可以将其打印到屏幕上。我在你的代码中没有看到任何实现。当你有一个比它可以打印。