微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nashorn javascript引擎-java8中的加法运算

如何解决Nashorn javascript引擎-java8中的加法运算

我有 2 个变量要使用 engine.eval()-java8 中的 nashorn javascript 引擎添加。? 我使用过这样的代码

     ScriptEngineManager sem=new ScriptEngineManager();
     ScriptEngine engine = sem.getEngineByName("nashorn");
     Integer sum = 20;
     Integer var2=30;
     try { 
        sum=(Integer)engine.eval("sum+var2"); 
     } catch(Exception e) {
       System.out.println("Error executing script: "+ e.getMessage());
     }

eval 函数只接受字符串参数。所以它显示错误。如何执行此操作?

解决方法

Nashorn ScriptEngine 是一个独立的运行时。除非明确指定,否则它不了解其范围之外的数据。

这里的 sum 和 var2 超出了 Nashorn 的范围。您可以通过多种方法将此数据传递给 Nashorn。其中之一是使用绑定

示例代码:

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("nashorn");
Integer sum = 20;
Integer var2 = 30;
try {
    Bindings bindings = engine.createBindings();
    bindings.put("sum",20);
    bindings.put("var2",30);

    double result = (double) engine.eval("sum+var2",bindings);
    System.out.println(result);
} catch (Exception e) {
    System.out.println("Error executing script: " + e.getMessage());
}

从整数到双精度的类型转换是一个细微差别解释here

但是这种脚本评估是相当有限的。您可以使用 Invocable api 来调用 javascript 函数。这 tutorial 是一个很好的起点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。