¿Existe una forma independiente de idioma de agregar una función a los enlaces de scripts JSR223?

losJSR223Bindings clase le permite exponer objetos Java arbitrarios a lenguajes de scripting. Pero tienen que ser objetos. Me gustaría definir una función.quit() que se puede llamar desde el entorno de scripting que se convierte enquitObject.run() en java Pero JSR223 no define el concepto de un objeto de función. ¿Existe una forma independiente de idioma de hacer lo siguiente en Javascript, a saber, tomar un Runnable () y crear una función en el entorno de scripting?

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

Con el soporte de Javascript incorporado para JSR223 esto crea unsun.org.mozilla.javascript.internal.InterpretedFunction que hace lo que yo quiero. Pero obviamente no funcionará en Jython o lo que sea, y me gustaría que este lenguaje sea independiente.

No quiero que los usuarios de mi script tengan que escribirquitObject.run() como eso es torpe, y no quiero analizar la entrada de script para encontrarquit() Como podría estar enterrado dentro de otro código.

Respuestas a la pregunta(1)

Su respuesta a la pregunta