我正在尝试使用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。 我在这里做错了吗?
提前致谢