当前位置: 首页 > 知识库问答 >
问题:

Java 8 Nashorn在不执行脚本的情况下加载脚本

毋修为
2023-03-14

我正在使用Java8 Nashorn来执行一个特定的先前同意的方法。我可以毫无问题地调用特定的方法。不过困扰我的一件事是,当我加载脚本时,它也会执行它。

例如,如果file.js包含一个print("hello world!")scriptEngine.eval(new FileReader("./file.js")将执行并打印hello world。我必须先这样做,然后才能调用我想要的特定方法。

有没有一种方法可以在不执行脚本的情况下加载脚本?

谢谢

共有1个答案

闽念
2023-03-14

事实证明,可以通过将引擎强制转换为可编译,然后调用compile函数来实现这一点。

final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
final Compilable compilable = (Compilable) engine;
        final Invocable invocable = (Invocable) engine;
        final String statement = "function fetch(values) { return values['first_name'] + ' ' + values['last_name']; };";
        final CompiledScript compiled = compilable.compile(statement);

这实现了我想要的,而无需评估

 类似资料:
  • 是否有任何方法可以将外部脚本包含(或加载)到脚本引擎,以便外部脚本中定义的所有函数都可以在方法中使用? 在我们的应用程序中,我们根据用户输入执行一些java脚本代码。当用户请求时,应用程序会创建一个ScriptEngine实例并根据输入参数执行适当的javascript代码。 这里的问题是javascript中有一些重复的功能。考虑一个例子: 场景1:当用户输入为十进制纬度和经度时,计算距离 -

  • 问题内容: 我曾经用来检查Perl程序的语法,然后退出而不执行它。有没有等效的方法可以对Python脚本执行此操作? 问题答案: 您可以通过编译来检查语法:

  • 问题内容: 在HTML页面中包含JavaScript的方法有很多。我知道以下选项: 内联代码或从外部URI加载 包括在或标记[ [1],[2] ] 没有属性或属性(仅外部脚本) 包含在静态源中或由其他脚本动态添加(处于不同的解析状态,具有不同的方法) 不计算硬盘中的浏览器脚本,javascript:URI和-attributes [[3] ],已经有16种方法可以使JS执行,我敢肯定我忘了一些东西

  • 问题内容: 我正在使用jquery地址插件来加载页面,但是没有hash(#)。 index.html: page.html: 在#content div中将从page.html中加载#content html(也许我应该使用其他函数,而不是.html(),请纠正我),因为div是script标签,但是加载该页面时我没有收到警告从ajax开始,无需加载ajax就可以运行。有人能帮我吗 ? 编辑:当我

  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?

  • 问题内容: 是否可以不执行而检查bash脚本语法? 使用Perl,我可以运行。bash脚本有任何等效命令吗? 问题答案: 也许是一个明显的警告:这可以验证语法,但不会检查您的bash脚本是否尝试执行不在您的路径中的命令,例如而不是。