2

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);

このような方法がある場合、または他の提案がある場合、これは私にとって最も一般的な方法ですか?

4

1 に答える 1