gpt4 book ai didi

java - 来自不同脚本的闭包的 Groovy 全局存储

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:56 25 4
gpt4 key购买 nike

是否可以存储来自不同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 中执行此操作的最佳方法是什么?我不确定如何处理脚本的调用,因为类是从这些脚本生成的。我能够在运行时创建脚本的实例,但如果不对其进行硬编码,我无法检索类/脚本的列表。

更新:

假设我在 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 的路径。

如果你想传递绑定(bind)(参数然后获取结果),你必须使用 Binding .

关于java - 来自不同脚本的闭包的 Groovy 全局存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43183452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com