【问题标题】:Addition operation in Nashorn javascript engine -java8Nashorn javascript引擎-java8中的加法运算
【发布时间】:2021-07-02 10:27:57
【问题描述】:

我有 2 个变量要在 java8 中使用 engine.eval()- 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


    【解决方案1】:

    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 是一个很好的起点。

    【讨论】:

    • 谢谢 Vigneswaran。这对我很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多