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、类中调用闭包时,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、方法的执行顺序,首先是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
新闻热点
疑难解答