1
私はGroovyでクロージャーのowner
の概念に出くわし、それは私を混同しているとき、何が起こるので、私は把握する小さなプログラムを書いたのかowner
作品:Groovyは:クロージャの「所有者」とは別の閉鎖
def examineClosure(closure) {
closure()
}
examineClosure() {
println "$owner"
examineClosure() {
println "$owner"
}
}
は、しかし、私は私が
$owner
が、内側の閉鎖で評価されたときに、Groovyのは実際には、外側の閉鎖は、暗黙のうちに
.call()
を実行しているためであると仮定し
java.lang.StackOverflowError
を得ました。これは予想される動作ですか? 「所有者」変数の値を挿入します。なぜ、その結果、
"some var: $var"
はGroovyのを使用して、構文「$の所有者が」次のことを意味し
"some var: " + var
変数 'this'、' owner'、および 'delegate'は、Groovyの任意のクロージャの範囲内に暗黙的に定義されています:http://groovy-lang.org/closures.html#closure-owner –
しかし、行:println "" + ownerは、所有者がStringであるか、toString()メソッドを実装しているので、スクリーンに印刷することができます。私はあなたのコードでその実装を見ていません。あなたがそれを持っているときはそれを印刷することができます。 – Rotem