如何使configslurper委托方法调用调用者类

时间:2013-04-16 18:39:00

标签: groovy

我想创建一个像这样的groovy类og脚本:

//...
def slurper = new ConfigSlurper().parse(someFile)
//...
//The exact method declaration
def methodCall(def arg){
   //Whatever i want to do
}
//Maybe it is easier with methodMissing
def methodMissing(def args) {
   //Whatever i want to do
}

要啜食的文件可能如下所示:

some {
   property = methodCall("with arg")
}

问题是我如何将“methodCall”委托给使用configslurper解析的类或脚本?目前,它将为您提供一种方法。

2 个答案:

答案 0 :(得分:2)

我认为this blog post有一个例子说明你想做什么。它比methodMissing更复杂,但可以完成。

答案 1 :(得分:1)

感谢SérgioMichels的链接,我找到了一个解决方案:

public class ScriptWithMethods extends Script {

   String scriptText;

   public ScriptWithMethods(File file) {
      scriptText = file.text
   }

   public void run() {
      GroovyShell shell = new GroovyShell();
      Closure closure = shell.evaluate("{it->$string}");
      closure.resolveStrategy = Closure.DELEGATE_FIRST
      closure.delegate = this
      closure.call()
   }

   def methodCall(def arg){
      //Whatever i want to do
   }
}

//...
def script = new ScriptWithMethods(scriptText:someFile)
def slurper = new ConfigSlurper().parse(script)

原因你也可以使用“方法缺失”,但这可以在我的用例

中使用