First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評論-1047  文章-0  trackbacks-0
          在上篇《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()
          運(yùn)行結(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的默認(rèn)值為owner,
          如果closure沒有‘嵌套’在其他closure中,那么該closure的owner的值為this;
          否則該closure的owner引用的是‘直接包含’該closure的closure


          讓我們用事實(shí)來說話吧:
          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()
          運(yùn)行結(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篇文章以回報(bào)‘蛟龍居’的常客 :)

          附:朝花夕拾——Groovy & Grails


          posted on 2007-12-23 01:43 山風(fēng)小子 閱讀(2992) 評論(3)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 巢湖市| 泽州县| 拉萨市| 和硕县| 资中县| 喜德县| 铜梁县| 苍溪县| 池州市| 三江| 灵丘县| 永顺县| 乌海市| 安龙县| 怀仁县| 资兴市| 楚雄市| 五大连池市| 岐山县| 宜都市| 龙川县| 卓资县| 松江区| 凌源市| 武邑县| 阜城县| 礼泉县| 玉环县| 六枝特区| 湖州市| 嘉善县| 黎城县| 巴南区| 武平县| 永修县| 沙雅县| 西峡县| 东丰县| 佛学| 平利县| 汝州市|