';这';在Groovy元编程中

';这';在Groovy元编程中,groovy,metaprogramming,Groovy,Metaprogramming,在下面的Groovy代码中,为了将fileAsString方法添加到String类中,有人能解释一下“this”到底指的是什么吗。我原以为它是调用fileAsString方法的对象,但很明显,这实际上就是委托所指的对象 String.metaClass.fileAsString = { this.class.getResourceAsStream(delegate).getText() } 谢谢, Don新定义的方法是闭包,因此“this”的含义与定义方法时的含义相同。“this”通常

在下面的Groovy代码中,为了将
fileAsString
方法添加到
String
类中,有人能解释一下“this”到底指的是什么吗。我原以为它是调用
fileAsString
方法的对象,但很明显,这实际上就是委托所指的对象

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

新定义的方法是闭包,因此“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"

如果代码没有出现在类中(例如脚本中),“this”指的是什么?Groovy从脚本生成一个类(该类将扩展Groovy.lang.script)。”脚本中的“this”表示生成的类的实例。Ha!我经常犯同样的错误。太棒了JavaScript,尽管有时候如果是的话,对我来说会很好。