Проблемы с GroovyShell и propertyMissing () - PullRequest
0 голосов
/ 09 мая 2011

У меня проблемы с использованием 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 Ответ

2 голосов
/ 12 мая 2011

используйте это вместо

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.
, чтобы поймать отсутствующее свойство, это методы, которые вы должны переопределить в своем подклассе

...