異なるgroovyスクリプトからクロージャを格納することは可能ですか? のは、私はクロージャを格納する必要があり、クラスのいくつかの種類があるとしましょう:異なるスクリプトからのクロージャのGroovyグローバル格納
package com.test
class ClosureContainer {
static closures = [:]
static def AddClosure(String name, Closure cl) {
println "Adding closure named ${name}"
closures[name] = cl
}
}
そして、私はそれにクロージャを追加するグルーヴィーなスクリプトがしたい:
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:
だが、私はコンテナにいくつかのクロージャを追加したパッケージcom.test.scriptsにtestScript.groovyを持っているとしましょう。
def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()
そして、私はにTestScript名をハードコーディングしています:私はGradleのスクリプトからクラスを生成し、このようなコードでインスタンスを作成してみましょうしようとしました。しかし、多くのスクリプトがあり、私はそれを動的に取得できるはずです。
ハードコーディングはどういう意味ですか?あなたのコードのどの部分がハードコードされていますか? – dsharew
私は質問を更新しました。 – Jaryn6909
ああ、その場合、GroovyScriptEngineを使用する必要があることを理解しています。 – dsharew