def parameterClosure(closure) { closure()}parameterClosure() { PRintln "In Outer Closure" println "this is " + this println "owner is " + owner println "delegate is " + delegate parameterClosure() { println "In Inner Closure" println "this is " + this println "owner is " + owner println "delegate is " + delegate }}返回In Outer Closurethis is ConsoleScript37@1372443owner is ConsoleScript37@1372443delegate is ConsoleScript37@1372443In Inner Closurethis is ConsoleScript37@1372443owner is ConsoleScript37$_run_closure1@3acd6fbedelegate is ConsoleScript37$_run_closure1@3acd6fbe2、類中調(diào)用閉包時,this、owner和delegate三個屬性的值都是上下文。class ParameterClosure { def handleClosure(closure) { closure() }}new ParameterClosure().handleClosure () { println "this is " + this println "owner is " + owner println "delegate is " + delegate}返回this is ConsoleScript43@1d476b4bowner is ConsoleScript43@1d476b4bdelegate is ConsoleScript43@1d476b4b3、方法的執(zhí)行順序,首先是this,其次是owner,最后是delegate。可以設置delegate來修改路由。class Handler { def f1() { println "f1 in Handler" } def f2() { println "f2 in Handler" }}class ParameterClosure { def handleClosure(closure) { closure.delegate = new Handler() closure() }}def f1() { println "f1 in script"}new ParameterClosure().handleClosure () { f1() f2()}返回f1 in scriptf2 in Handler
新聞熱點
疑難解答