首页 > 学院 > 开发设计 > 正文

Groovy闭包委托

2019-11-08 19:29:53
字体:
来源:转载
供稿:网友

Groovy闭包委托

1、闭包的三个属性this、owner和delegate,用来确定那个对象处理该闭包的方法调用。在内部的闭包中,owner和delegate的值被修改了。
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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表