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》中,我幫大家講解了delegate是什么以及其作用。
          本篇將講解一下closure中的owner,以及this,delegate以及owner三者間的關系。

          先讓我們來看個例子:
          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()
          運行結果:
          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有什么關系呢?
          隱式變量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()
          運行結果:
          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

          大家可以從其中值的關系看出this, delegate以及owner三者的關系與我們之前所說的相符 :)

          連夜連發2篇文章以回報‘蛟龍居’的常客 :)

          附:朝花夕拾——Groovy & Grails


          posted on 2007-12-23 01:43 山風小子 閱讀(2987) 評論(3)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 桃园市| 河曲县| 都江堰市| 普兰店市| 新昌县| 习水县| 万荣县| 万盛区| 富川| 濉溪县| 香格里拉县| 吴江市| 丹江口市| 阿克陶县| 齐河县| 翁源县| 东至县| 连城县| 南和县| 安塞县| 宜良县| 济宁市| 铅山县| 莫力| 丰都县| 扎赉特旗| 东宁县| 玉林市| 阿鲁科尔沁旗| 滨海县| 左贡县| 绍兴市| 南宁市| 开封市| 翁源县| 洛隆县| 保山市| 万源市| 三台县| 岑巩县| 丹巴县|