Scala CompiledScript重用

时间:2014-03-18 17:18:20

标签: scala

我正在尝试使用Scala ScriptEngine(2.11)在Java中运行Scala脚本。 该脚本使用提供给引擎的绑定。 脚本多次使用不同的绑定。 为此,我使用的是CompiledScript。

脚本第一次运行正常并使用绑定。 但是,当使用新绑定重新运行相同的CompiledScript时,结果不会更改。 我观察到的是脚本实际上没有第二次运行。它只使用存储的引擎状态。

以下是代码段:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("scala");
    Bindings bindings = engine.createBindings();
    bindings.put("firstVal", 209);
    bindings.put("secondVal", 30);
    bindings.put("sumUtil", new Sum());
    CompiledScript script = ((Compilable)engine).compile(
        "var sum = sumUtil.asInstanceOf[com.myutils.Sum]\n"+
        "var firstInt = firstVal.asInstanceOf[Integer]\n"+
        "var secondInt = secondVal.asInstanceOf[Integer]\n"+
        "sum.add(firstInt, secondInt)\n"    
        );          
    Integer res1 = (Integer) script.eval(bindings);
    System.out.println("Result 1: "+res1);
    bindings = engine.createBindings();
    bindings.put("firstVal", 2);
    bindings.put("secondVal", 3);
    Integer res2 = (Integer) script.eval(bindings);
    System.out.println("Result 2: "+res2);

输出结果为:

firstVal:Object = 209
secondVal:对象= 30
sumUtil:Object = com.myutils.Sum@71136646
结果1:239
firstVal:Object = 2
secondVal:对象= 3
结果2:239

期望结果2是" 5"而不是239。 我在这里做错了吗?

提前致谢

0 个答案:

没有答案