【问题标题】:'this' in Groovy meta-programmingGroovy 元编程中的“this”
【发布时间】:2010-10-14 10:56:01
【问题描述】:

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

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

谢谢, 唐

【问题讨论】:

  • 哈!我经常犯同样的错误。 Groovy != JavaScript,虽然有时它对我来说会很好。

标签: groovy metaprogramming


【解决方案1】:

新定义的方法是一个闭包,因此“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”指的是生成的类的实例。
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 2011-06-28
  • 2011-02-21
  • 2011-11-06
  • 2013-07-01
  • 2017-03-19
相关资源
最近更新 更多