Groovy:当一个闭包';s";“业主”;这是另一个结束
我在Groovy中遇到了闭包的Groovy:当一个闭包';s";“业主”;这是另一个结束,groovy,Groovy,我在Groovy中遇到了闭包的owner的概念,这让我很困惑,因此我编写了一个小程序来了解owner是如何工作的: def examineClosure(closure) { closure() } examineClosure() { println "$owner" examineClosure() { println "$owner" } } 但是,当我运行这段代码时,我得到了一个java.lang.StackOverflowerError,我
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()方法,因此可以将其打印到屏幕上。我在你的代码中没有看到任何实现。当你有一个比它可以打印。