2014-11-25 67 views

回答

2

代表設置是否能夠存活?

如果通過「生存」,您的意思是克隆將具有相同的代表,那麼答案是「是」。

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)正常的事情,那麼正確的事要做的通常是克隆閉包,然後只改變克隆中的那些屬性,使原始的一個與通過時一樣完整。

相關問題