Ist es möglich, Closures aus verschiedenen groovigen Skripten zu speichern? Lassen Sie uns sagen, dass ich eine Art von Klasse, die die Verschlüsse speichern soll:Groovy globale Speicherung von Closures aus verschiedenen Skripten
package com.test
class ClosureContainer {
static closures = [:]
static def AddClosure(String name, Closure cl) {
println "Adding closure named ${name}"
closures[name] = cl
}
}
Und dann würde Ich mag groovy Skripte haben, die Verschlüsse ihm hinzufügen würde:
import com.test.ClosureContainer as container
container.AddClosure("Interesting stuff", {
println "I'm doing some interesting stuff"
})
Und später, ich sollte in der Lage sein, es wie zu nennen:
def closureCode = ClosureContainer.closures["Interesting stuff"]
closureCode()
Was ist der beste Ansatz, es in Groovy zu tun? Ich bin mir nicht sicher, wie ich mit dem Aufruf der Skripte umgehen soll, da Klassen aus diesen Skripten generiert werden. Ich bin in der Lage, Instanzen der Skripts zur Laufzeit zu erstellen, aber ich kann keine Liste der Klassen/Skripte abrufen, ohne sie hart zu codieren.
UPDATE:
Nehmen wir an, ich testScript.groovy in Paket com.test.scripts haben, die ein paar Verschlüsse in den Behälter hinzufügt. Ich habe versucht, die gradle erzeugen Klassen aus den Skripten zu lassen und beispielsweise in dem Code wie folgt erstellen:
def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()
Und ich bin hartzucodieren den Testscript Namen. Aber es wird viele Skripte geben und ich sollte es dynamisch abrufen können.
was meinst du mit hart codieren? Welcher Teil Ihres Codes ist fest codiert? – dsharew
Ich habe die Frage aktualisiert. – Jaryn6909
Oh ich verstehe jetzt in diesem Fall müssen Sie GroovyScriptEngine verwenden. – dsharew