在上篇《
Groovy解惑——closure中的delegate》中,我?guī)痛蠹抑v解了delegate是什么以及其作用。
本篇將講解一下closure中的owner,以及this,delegate以及owner三者間的關(guān)系。
先讓我們來看個例子:
class?OwnerDemo?{
????def?outerClosure?=?{
????????println?"the?owner?of?outerClosure:?"?+?owner
????????def?innerClosure?=?{?
????????????println?"the?owner?of?innerClosure:?"?+?owner?
????????????def?innestClosure?=?{
????????????????println?"the?owner?of?innestClosure:?"?+?owner
????????????}
????????????innestClosure()
????????}
????????innerClosure()
????}
}
def?ownerDemo?=?new?OwnerDemo()
ownerDemo.outerClosure()
運行結(jié)果:
the owner of outerClosure: OwnerDemo@eccfe7
the owner of innerClosure: OwnerDemo$_closure1@4745cf
the owner of innestClosure: OwnerDemo$_closure1_closure2@109dcbb
注意:OwnerDemo$_closure1指的是outerClosure的類名,而OwnerDemo$_closure1_closure2指的是innerClosure的類名
通過這個例子,大家就清楚了,
closure的owner引用的是該closure的‘擁有者’那么this, delegate以及owner有什么關(guān)系呢?
隱式變量delegate的默認值為owner,
如果closure沒有‘嵌套’在其他closure中,那么該closure的owner的值為this;
否則該closure的owner引用的是‘直接包含’該closure的closure讓我們用事實來說話吧:
class?OwnerDemo?{
????def?outerClosure?=?{
????????println?"the?owner?of?outerClosure:?"?+?owner
????????println?"the?delegate?of?outerClosure:?"?+?delegate
????????println?"this?in?the?outerClosure:?"?+?this
????????def?innerClosure?=?{?
????????????println?"the?owner?of?innerClosure:?"?+?owner?
????????????println?"the?delegate?of?innerClosure:?"?+?delegate?
????????????println?"this?in?the?innerClosure:?"?+?this?
????????????def?innestClosure?=?{
????????????????println?"the?owner?of?innestClosure:?"?+?owner
????????????????println?"the?delegate?of?innestClosure:?"?+?delegate
????????????????println?"this?in?the?innestClosure:?"?+?this
????????????}
????????????println?"innestClosure:?"?+?innestClosure
????????????innestClosure()
????????}
????????println?"innerClosure:?"?+?innerClosure
????????innerClosure()
????}
}
def?ownerDemo?=?new?OwnerDemo()
def?outerClosure?=?ownerDemo.outerClosure
println?"outerClosure:?"?+?outerClosure
outerClosure()
運行結(jié)果:
outerClosure: OwnerDemo$_closure1@10cc9b4
the owner of outerClosure: OwnerDemo@8e7f54
the delegate of outerClosure: OwnerDemo@8e7f54
this in the outerClosure: OwnerDemo@8e7f54
innerClosure: OwnerDemo$_closure1_closure2@1eb1db2
the owner of innerClosure: OwnerDemo$_closure1@10cc9b4
the delegate of innerClosure: OwnerDemo$_closure1@10cc9b4
this in the innerClosure: OwnerDemo@8e7f54
innestClosure: OwnerDemo$_closure1_closure2_closure3@12a78ee
the owner of innestClosure: OwnerDemo$_closure1_closure2@1eb1db2
the delegate of innestClosure: OwnerDemo$_closure1_closure2@1eb1db2
this in the innestClosure: OwnerDemo@8e7f54
大家可以從其中值的關(guān)系看出this, delegate以及owner三者的關(guān)系與我們之前所說的相符 :)
連夜連發(fā)2篇文章以回報‘蛟龍居’的常客 :)附:
朝花夕拾——Groovy & Grails
posted on 2007-12-23 01:43
山風(fēng)小子 閱讀(2984)
評論(3) 編輯 收藏 所屬分類:
Groovy & Grails