JSR223 Bindings
class을 사용하면 임의의 Java 객체를 스크립팅 언어에 표시 할 수 있습니다. 그러나 그들은 대상이되어야합니다. Java에서 quitObject.run()
이되는 스크립팅 환경에서 호출 할 수있는 함수 quit()
을 정의하고자합니다. 그러나 JSR223은 함수 객체의 개념을 정의하지 않습니다. Javascript에서 Runnable()을 사용하고 스크립팅 환경에서 함수를 작성하는 언어 독립적 인 방법이 있습니까? JSR223의 내장 자바 스크립트를 지원JSR223 스크립팅 바인딩에 함수를 추가하는 언어 독립적 인 방법이 있습니까?
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));
이 내가 원하는 것을 이는 sun.org.mozilla.javascript.internal.InterpretedFunction
을 만듭니다. 하지만 분명히 자이 썬에서 작동하지 않을 것입니다. 그리고 저는 이것을 언어 독립적으로 만들고 싶습니다.
내 스크립트 사용자가 quitObject.run()
을 입력하는 것을 원하지 않습니다. 스크립트 입력을 구문 분석하여 quit()
을 파싱하고 싶지 않아 다른 코드 내에 묻을 수 있습니다.
재미있게 - 내가 마음에 가지고 있었던 것이 아니라 나는 그것을 조사해야 할 것이다! 감사! –