GroovyShell和propertyMissing()的问题

时间:2011-05-09 14:00:54

标签: groovy dsl groovyshell

我在使用propertyMissing()GroovyShell

时遇到问题

我有文件

/**
 * @file FooScript.groovy
 */
abstract class FooScript extends Script {

    def propertyMissing(String name) {
        "This is the property '$name'"
    }

    def propertyMissing(String name, value) {
        println "You tried to set property '$name' to '$value'"
    }
}

/**
 * @file FooScriptTest.groovy
 */

import org.codehaus.groovy.control.*


def fooScript = """\
                foo = 'bar'
                println foo"""

def conf = new CompilerConfiguration()
conf.setScriptBaseClass("FooScript")
def sh = new GroovyShell(conf)

sh.evaluate fooScript

当我运行FooScriptTest.groovy时,我期待输出

  

您尝试将属性'foo'设置为'bar'

     

这是属性'foo'

我得到的是:

  

似乎我的propertyMissing()被默认值覆盖。我该如何防止这种情况?

1 个答案:

答案 0 :(得分:2)

使用此代替

abstract class BarScript extends Script {
  def getProperty(String name) {
    "This is the property '$name'"
  }
  void setProperty(String name, value) {
    println "You tried to set property '$name' to '$value'"
  }
}

missingProperty方法是捕获属性访问权的最后一个资源, 只有当其他一切都失败时才进行测试 但是groovy.lang.Script已经实现了更高优先级的方法get/setProperty 因此,为了捕获缺失的属性,这些是您必须在子类中重写的方法