是否可以存儲來自不同常規腳本的閉包? 比方說,我有某種類的應該保存關閉:Groovy全球存儲不同腳本的閉包
package com.test
class ClosureContainer {
static closures = [:]
static def AddClosure(String name, Closure cl) {
println "Adding closure named ${name}"
closures[name] = cl
}
}
然後我想有Groovy腳本,將添加關閉它:
import com.test.ClosureContainer as container
container.AddClosure("Interesting stuff", {
println "I'm doing some interesting stuff"
})
後來,我應該可以這樣稱呼它:
def closureCode = ClosureContainer.closures["Interesting stuff"]
closureCode()
什麼是在Groovy中實現它的最佳方法?我不知道如何處理調用腳本,因爲類是從這些腳本生成的。 我可以在運行時創建腳本的實例,但是我無法在不對其進行硬編碼的情況下檢索類/腳本的列表。
UPDATE:
讓我們假設我有testScript.groovy在增加了一些封閉的容器包裝com.test.scripts。我嘗試讓gradle從腳本生成類並在代碼中創建實例,如下所示:
def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()
而且我正在對testScript名稱進行硬編碼。但是會有很多腳本,我應該能夠動態地檢索它。
硬編碼是什麼意思?哪部分代碼是硬編碼的? – dsharew
我更新了問題。 – Jaryn6909
哦,我現在明白在這種情況下,你必須使用GroovyScriptEngine。 – dsharew