'this' в мета-программировании Groovy - PullRequest
2 голосов
/ 20 марта 2009

В следующем коде Groovy, добавленном к классу String, добавлен метод fileAsString, кто-то может объяснить, что именно означает «this». Я думал, что это был объект, для которого вызывается метод fileAsString, но, по-видимому, это именно то, к чему относится делегат.

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

Спасибо, Дон

1 Ответ

2 голосов
/ 20 марта 2009

Вновь определенный метод является замыканием, поэтому «this» будет иметь то же значение, что и при определении метода. Обычно «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"
...