当eval带有绑定时,Nashorn找不到函数
Nashorn does not find function when eval with bindings
当我计算有绑定或没有绑定的nashorn脚本时,有一个奇怪的区别:没有绑定调用函数没有问题,但是有了绑定就找不到函数了。下面是一个例子:
public class SimpleNashornTester {
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn");
Compilable jsCompilable = (Compilable) jsEngine;
Invocable jsInvocable = (Invocable) jsEngine;
ScriptContext scriptCtxt = new SimpleScriptContext();
Bindings engineScope = scriptCtxt.getBindings(ScriptContext.ENGINE_SCOPE);
CompiledScript jsScript = jsCompilable.compile("function definition() {print('"Hello'")}");
jsScript.eval(engineScope); // no error with jsScript.eval() !
jsInvocable.invokeFunction("definition", new Object[] {});
}
}
这会产生错误:
Exception in thread "main" java.lang.NoSuchMethodException: No such function definition
at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:204)
如果在脚本的求值中没有参数engineescope,则查找并调用函数。有人能解释一下这种差异吗?如何使用绑定而不出现错误?
您正在使用一个新的ScriptContext和它相关联的ENGINE_SCOPE
绑定来编译脚本。invokeFunction
/invokeMethod
使用默认的ScriptContext(和它相关联的ENGINE_SCOPE
绑定)来搜索函数。每个不同的ENGINE_SCOPE
绑定都与它自己的ECMAScript全局对象(以及它自己的ECMAScript全局对象)相关联。
在调用之前将默认上下文更改为新上下文:
// change the default ScriptContext jsEngine.setContext(scriptCtxt); jsInvocable.invokeFunction("definition", new Object[] {});
对于编译后的脚本也使用默认的ScriptContext。如:
ScriptContext scriptCtxt = jsEngine.getContext(); // new SimpleScriptContext();
相关文章:
- 气质的“nestRemoting()”有时可以'找不到关系
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 找不到模块捆绑包
- for循环中的javascript if语句找不到==
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- [Vue warn]:找不到元素
- ngRoute找不到模板
- 未能加载,因为找不到支持的源.当播放HTML5音频元素时
- 因果报应-找不到模块:错误:无法解析模块'scs'
- Angular 2:在本地.json文件上找不到文件
- module.js在运行iron节点时找不到模块
- 放大弹出生成“;找不到文件”;YouTube视频的错误
- 我发现了一些只在移动设备上可见的垃圾邮件链接,我可以'找不到包含此垃圾邮件链接的脚本的位置
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- Meteor.js可以'找不到语义:ui包
- 找不到容器:goog.Disposable.instances _在为javascript工具使用泄漏查找器时出错
- 错误:找不到模块'/lib/cli'
- 当eval带有绑定时,Nashorn找不到函数