2009-03-20 7 views
2

In der folgenden Groovy-Code geschnippt, um eine fileAsString Methode zu der String Klasse hinzuzufügen, könnte jemand erklären, was genau "das" bezieht sich auf. Ich dachte, dass es das Objekt war, auf dem die fileAsString-Methode aufgerufen wird, aber anscheinend bezieht sich das eigentlich auf delegate.'dies' in Groovy Meta-Programmierung

String.metaClass.fileAsString = { 
    this.class.getResourceAsStream(delegate).getText() 
} 

Danke, Don

+0

Ha! Ich mache oft denselben Fehler. Groovy! = JavaScript, obwohl es manchmal gut für mich wäre. – noah

Antwort

2

Die neu definierte Methode ist ein Verschluss, so ‚dies‘ die gleiche Bedeutung, wie sie es tut, wenn die Methode definiert ist. Normalerweise bezieht sich "dies" auf das Objekt, das die Methode definiert hat, wie unten:

class Foo { 
    def meta() { 
     String.metaClass.bar = { 
      println(this.class) // 'this' refers to the instance of Foo 
     } 
    } 

    def main() { 
     meta() 
     new String().bar() 
    } 
} 
new Foo().main()     // prints "class Foo" 
+0

Worauf bezieht sich "das", wenn der Code nicht innerhalb einer Klasse angezeigt wird, z. in einem Skript? –

+0

Groovy erzeugt eine Klasse aus einem Skript (die Klasse erweitert groovy.lang.Script). 'Dies' in einem Skript bezieht sich auf die Instanz dieser generierten Klasse. – dstnbrkr