开发者

Problems with GroovyShell and propertyMissing()

开发者 https://www.devze.com 2023-03-04 12:27 出处:网络
I\'m having problems using propertyMissing() together with GroovyShell I have the files /** * @file FooScript.groovy

I'm having problems using propertyMissing() together with GroovyShell

I have the files

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

    def propertyMissing(String name) {
        "This is the pr开发者_如何学Pythonoperty '$name'"
    }

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

and

/**
 * @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

When I run FooScriptTest.groovy I expect the output

You tried to set property 'foo' to 'bar'

This is the property 'foo'

What I get is:

bar

Seems my propertyMissing() is overridden by the default one. How do I prevent this?


use this instead

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 methods are the last resource to catch a property access, tested only when everything else has failed.
but groovy.lang.Script already implements the higher priority methods get/setProperty.
so to catch a missing property, these are the methods you have to override in your subclass

0

精彩评论

暂无评论...
验证码 换一张
取 消