2009-03-20 10 views
2

fileAsStringメソッドをStringクラスに追加するために抜粋された次のGroovyコードでは、' this 'が何を指しているのか誰かが説明できるでしょうか。私はそれがfileAsStringメソッドが呼び出されたオブジェクトだと思っていましたが、それは実際にはデリゲートが参照するものです。'これはGroovyメタプログラミングで

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

おかげで、 ドン

+0

Ha!私は同じ間違いを頻繁にする。 Groovy!= JavaScriptですが、時にはそれは私にとってはうれしいでしょう。 – noah

答えて

2

、新たに定義されたメソッドが閉鎖され、そのメソッドが定義されている場合、それは同じように「この」と同じ意味を持つことになります。通常、「this」は、以下のようにメソッドを定義したオブジェクトを参照します。

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

コードがクラス内に表示されない場合、「this」とは何を指しますか?スクリプトで? –

+0

Groovyはスクリプトからクラスを生成します(クラスはgroovy.lang.Scriptを拡張します)。スクリプト内の 'this'は、その生成されたクラスのインスタンスを参照します。 – dstnbrkr

関連する問題