首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种独立于语言的方法来向JSR223脚本绑定添加函数?

有没有一种独立于语言的方法来向JSR223脚本绑定添加函数?
EN

Stack Overflow用户
提问于 2012-11-27 02:48:34
回答 1查看 395关注 0票数 3

JSR223 Bindings class允许您向脚本语言公开任意的Java对象。但它们必须是对象。我想定义一个可以从脚本环境调用的函数quit(),该脚本环境可以转换为Java语言中的quitObject.run()。但是JSR223没有定义函数对象的概念。在Javascript中,有没有一种独立于语言的方法来做以下事情,即获取一个Runnable()并在脚本环境中创建一个函数?

代码语言:javascript
复制
 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));  

有了对JSR223的内置Javascript支持,这就创建了一个sun.org.mozilla.javascript.internal.InterpretedFunction,它可以做我想要的事情。但它显然不能在Jython或其他任何语言中工作,我想让它独立于语言。

我不希望我的脚本用户不得不输入quitObject.run(),因为这很笨拙,我也不想解析脚本输入来查找quit(),因为它可能会被其他代码掩埋。

EN

回答 1

Stack Overflow用户

发布于 2012-11-29 17:04:43

如果您查看javascript engine source code,您会发现oracle/sun是如何实现两个函数(打印和打印)的,当您启动引擎时,这两个函数会神奇地(或不神奇地)呈现出来。

这些函数是“脚本化”的,这或多或少就是你所做的。

我要做的是:在评估新上下文中的任何其他输入之前,加载并评估一个bootstrap.[language_extension]

您可以很容易地为您想要支持的每种语言创建这样的脚本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13571169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档