gpt4 book ai didi

java - 从 Java 使用 ScriptEngine 调用自定义脚本函数

转载 作者:行者123 更新时间:2023-11-29 08:54:22 41 4
gpt4 key购买 nike

我在用 python、groovy 和 javascript 编写的不同脚本文件上有相同名称的相同自定义函数。用户可以选择要使用的脚本之一。我想以通用方式从这些脚本中调用函数。

  ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("python");
Bindings bindings = engine.createBindings();

engine.eval(new FileReader("C:/Users/Cgr/Desktop/CustomPython.py");
Invocable inv = (Invocable) engine;

System.out.println(inv.invokeFunction("customConcatFunc", "str1", "str2"));

通过这种方式,我可以通过使用“CustomJs.js”或“Customgroovy.groovy”更改读取器文件来调用我的函数,甚至将 ScriptEngineManager 参数更改为“javascript”或“groovy”。

但是,我想知道是否有一种方法可以在不使用 invokeFunction 的情况下调用函数,如下所示:

首先,评估脚本并将结果放在绑定(bind)上,然后在此对象上调用函数。

   bindings.put("x", "str1");
bindings.put("y", "str2");
bindings.put("script", engine.eval(new FileReader("C:/Users/Cgr/Desktop/CustomgrPython.py")));

engine.eval("script.customConcatFunc(x,y)", bindings);

所以,如果有这样的方式或者有任何其他建议,这对我来说是最通用的方式吗?

最佳答案

下面的方法可能有助于避免调用 invokeFunction:

@Test
public void test60_ScriptEngineTest()
throws URISyntaxException, ScriptException, NoSuchMethodException, FileNotFoundException {

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
Compilable compilable = (Compilable) engine;
Bindings bindings = engine.createBindings();

URL url=getClass().getResource("/data-encoder-dir/testFunc.groovy");
File script =new File(url.toURI());
Reader reader = new FileReader(script);
CompiledScript compiledScript = compilable.compile(reader);

bindings.put("x", 5011);
String result = (String) compiledScript.eval(bindings);
assertEquals(result, "5011");

}

附加的 groovy 文件(在/data-encoder-dir/testFunc.groovy 中):

public String testFunc(Integer bd) {
return bd.toString();
}

testFunc(x)

PS:我正在使用 groovyjavascript 场景或其他兼容的 java 脚本引擎将遵循相同的路线。

关于java - 从 Java 使用 ScriptEngine 调用自定义脚本函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088868/

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