2013-04-16 56 views
1

我想創建一個Groovy類OG這樣的腳本:如何使configslurper委託方法調用呼叫方

//... 
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解析的類或腳本?目前它會給你一個辦法。

回答

1

由於塞爾吉奧米歇爾斯鏈接我找到了一個解決方案:

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) 

原因你也可以使用「方法失蹤」,但這部作品在我的用例

2

我th this blog post有一個你想要做什麼的例子。它比methodMissing更復雜,但可以完成。

+0

謝謝。我實際上在一段時間之前發現了這篇文章,但從來沒有讀過它。它向我指出了正確的方向,但我會爲下一位讀者發佈一個答案。 – mathiasbn