我在用 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"));
通过这种方式,我可以调用我的函数,甚至将 ScriptEngineManager 参数更改为“javascript”或“groovy”,并使用“CustomJs.js”或“Customgroovy.groovy”更改阅读器文件。
但是,我想知道有没有一种方法可以在不使用invokeFunction
如下方式的情况下调用函数:
首先,评估脚本并将结果放在绑定上,然后在此对象上调用函数。
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);
那么,如果有这样的方式或有其他建议,这对我来说是最通用的方式吗?