当它被克隆时,关闭的delagate会发生什么?
答
代表设置是否能够存活?
如果通过“生存”,您的意思是克隆将具有相同的代表,那么答案是“是”。
groovy:000> c = {
groovy:001> append 'Hello'
groovy:002> }
===> [email protected]
groovy:000>
groovy:000> c.delegate = new StringBuffer()
===>
groovy:000> d = c.clone()
===> [email protected]
groovy:000>
groovy:000> c.delegate
===>
groovy:000> d.delegate
===>
groovy:000> c()
===> Hello
groovy:000> c.delegate
===> Hello
groovy:000> d.delegate
===> Hello
groovy:000> d.delegate.append 'Goodbye'
===> HelloGoodbye
groovy:000> c.delegate
===> HelloGoodbye
groovy:000> d.delegate
===> HelloGoodbye
groovy:000>
根据具体情况,如果你写它接受一个封闭的方法和你的方法是要改变封闭的状态(如修改委托或resolveStrategy)正常的事情,那么正确的事要做的通常是克隆闭包,然后只改变克隆中的那些属性,使原始的一个与通过时一样完整。