我在Groovy中遇到了owner
闭包的概念并且让我很困惑,所以我编写了一个小程序来弄清owner
的工作原理:
def examineClosure(closure) {
closure()
}
examineClosure() {
println "$owner"
examineClosure() {
println "$owner"
}
}
当我运行此代码时,我得到了一个java.lang.StackOverflowError
,我假设是因为在内部闭包中评估$owner
时,Groovy实际上是在.call()
上隐式执行外封闭。这是预期的行为吗?为什么结果与
examineClosure() {
println "$owner"
examineClosure() {
println "" + owner
}
}
据我了解,"some var: $var"
只是简单地用于"some var: " + var
答案 0 :(得分:0)
语法" $ owner"使用Groovy意味着以下内容:插入'所有者'变量值作为字符串进入" "部分。
由GString definition in Groovy引起的原因。
使用GString的示例如下:
String $outerValue = "groovy GString syntax"
"This is a String using $outerValue. it makes the String clear and more readable"."
因此,我不确定您与关闭部分有关的错误。
不幸的是,你的假设是:我的理解是"一些var:$ var"简直就是Groovy 简写为"一些var:" + var
错了。
在以下代码中:
examineClosure() {
println "$owner"
examineClosure() {
println "" + owner
}
}
根本没有定义变量所有者。
这就是你得到java.lang.StackOverflowError。
的原因