Существует ли независимый от языка способ добавления функции в привязки сценариев JSR223?
JSR223Bindings
учебный класс позволяет выставлять произвольные объекты Java на языки сценариев. Но они должны быть объектами. Я хотел бы определить функциюquit()
что можно вызвать из среды сценариев, которая превращается вquitObject.run()
на Яве. Но JSR223 не делаетопределить понятие функционального объекта. Существует ли независимый от языка способ сделать следующее в Javascript, а именно взять Runnable () и создать функцию в среде сценариев?
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));
Благодаря встроенной поддержке Javascript для JSR223 это создаетsun.org.mozilla.javascript.internal.InterpretedFunction
который делает то, что я хочу. Но это, очевидно, выигралработать в Jython или что-то еще, и яЯ хотел бы сделать этот язык независимым.
Я нея не хочу, чтобы пользователи моего скрипта набиралиquitObject.run()
как'неуклюжий, а яне хочу анализировать ввод скрипта, чтобы найтиquit()
как это может быть похоронено в другом коде.