Python、Groovy、および JavaScript で記述された異なるスクリプト ファイルに同じ名前の同じカスタム関数があります。ユーザーは、使用するスクリプトの 1 つを選択できます。これらのスクリプトから一般的な方法で関数を呼び出したいです。
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
ただし、以下のように使用せずに関数を呼び出す方法はあるのでしょうか。
まず、スクリプトを評価し、結果をバインドしてから、このオブジェクトの関数を呼び出します。
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);
このような方法がある場合、または他の提案がある場合、これは私にとって最も一般的な方法ですか?