2016-06-27 17 views
0

私は、次のコードに取り組んでいます:groovy.lang.MissingPropertyException:いいえ、そのようなプロパティ:クラスの所有者:母親

は出産方法の閉鎖で「this.owner」で例外をキャッチしました。

で仕上げを実行し、
class Mother { 
      int field = 1 
      int foo(){ 
       return 2 
      } 
      Closure birth(param){ 
       def local = 3 
       def closure = {caller -> [this,field,foo(),local,param,caller,this.owner]} 
       return closure 
      } 
     } 

     Mother m = new Mother(); 
     closure = m.birth(4); 

     context = closure.call(this); 
     println context[0].class.name 

     assert context[1..4] == [1,2,3,4] 
     assert context[5] instanceof Script 
     assert context[6] instanceof Mother 

     fClosure = m.birth(4); 
     sClosure = m.birth(4); 
     assert false == fClosure.is(sClosure) 

:なぜ母

'this.owner' キャッチgroovy.lang.MissingPropertyException:いいえ、そのような プロパティ:クラスの所有者をそれ?

+0

私の答えは問題を解決しますか?もしそうなら、それを受け入れてください。 – Opal

答えて

0

それはすべてがうまく機能し、特に、見た目hereをご用意ください。

thisは、対応するクラスがMotherであり、それは何のownerを持っていないので、閉鎖は

定義されている外側のクラスに対応フィールドもプロパティもMPEで失敗します。 ownerMotherクラスに定義すると、そのクラスは実行されます(また、別の例外で失敗する可能性があります)。

+0

これは、クロージャが定義されている囲むクラスに対応するのが正しいです。 「this」を取り除くために、テストに間違いはありません。 – BobJao

+0

@BobJao私の答えが問題を解決するなら、それを受け入れてください。 – Opal

関連する問題