Java Groovy全局存储来自不同脚本的闭包
是否可以存储来自不同groovy脚本的闭包? 假设我有一个类可以存储闭包:Java Groovy全局存储来自不同脚本的闭包,java,groovy,closures,Java,Groovy,Closures,是否可以存储来自不同groovy脚本的闭包? 假设我有一个类可以存储闭包: package com.test class ClosureContainer { static closures = [:] static def AddClosure(String name, Closure cl) { println "Adding closure named ${name}" closures[name] = cl } } 然后,我希
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中实现这一点的最佳方法是什么?我不确定如何处理脚本的调用,因为类是从这些脚本生成的。
我能够在运行时创建脚本实例,但若不对其进行硬编码,就无法检索类/脚本列表
更新:
假设我在com.test.scripts包中有testScript.groovy,它向容器中添加了一些闭包。我尝试让gradle从脚本生成类,并在代码中创建实例,如下所示:
def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()
我正在硬编码testScript名称。但是会有很多脚本,我应该能够动态地检索它。运行groovy脚本的推荐方法是使用
GroovyScriptEngine
:
String[] path = new String[] { "." };
GroovyScriptEngine engine = new GroovyScriptEngine(path);
engine.run("yoursriptname.groovy", new Binding())
注意:yoursriptname
应该是脚本相对于path
的路径
如果要传递绑定(参数,然后获得结果),必须使用。运行groovy脚本的推荐方法是使用
GroovyScriptEngine
:
String[] path = new String[] { "." };
GroovyScriptEngine engine = new GroovyScriptEngine(path);
engine.run("yoursriptname.groovy", new Binding())
注意:yoursriptname
应该是脚本相对于path
的路径
如果要传递绑定(参数,然后获得结果),必须使用。硬编码是什么意思?您的代码的哪一部分是硬编码的?我更新了问题。哦,我现在明白了,在这种情况下,您必须使用GroovyScriptEngine。硬编码是什么意思?你的代码的哪一部分是硬编码的?我更新了这个问题。哦,我现在明白了,在这种情况下,你必须使用GroovyScriptEngine。这解决了在运行多个脚本时全局存储闭包的问题吗?我想我可以这样做,非常感谢您的回复。这解决了在运行多个脚本时全局存储闭包的问题吗?我想我可以这样做,非常感谢您的回复。