Czy istnieje niezależny od języka sposób dodania funkcji do powiązań skryptowych JSR223?

TheJSR223Bindings klasa pozwala na eksponowanie dowolnych obiektów Java na języki skryptowe. Ale muszą być przedmiotami. Chciałbym zdefiniować funkcjęquit() które można wywołać ze środowiska skryptowego, które się zmieniaquitObject.run() w Javie. Ale JSR223 nie definiuje pojęcia obiektu funkcji. Czy istnieje niezależny od języka sposób wykonywania następujących czynności w języku JavaScript, a mianowicie pobranie Runnable () i utworzenie funkcji w środowisku skryptowym?

 static private Object asFunction(ScriptEngine engine, Runnable r) 
    throws ScriptException
 { 
        final Bindings bindings = engine.createBindings();
        bindings.put("r", r);
        return engine.eval(
          "(function (r) { var f = function() { r.run(); }; return f;})(r)",
          bindings);
 }

 Runnable quitObject = /* get/create a Runnable here */
 Bindings bindings = engine.createBindings();
 bindings.put("quit", asFunction(engine, quitObject));  

Dzięki wbudowanej obsłudze Javascript dla JSR223 tworzy tosun.org.mozilla.javascript.internal.InterpretedFunction co robi to, co chcę. Ale oczywiście nie będzie działać w Jythonie ani w żadnym innym i chciałbym uczynić ten niezależny od języka.

Nie chcę, aby moi użytkownicy skryptów musieli wpisywaćquitObject.run() jak to jest niezdarne i nie chcę analizować danych wejściowych skryptu w celu znalezieniaquit() ponieważ może być zakopany w innym kodzie.

questionAnswers(1)

yourAnswerToTheQuestion