我正在尝试评估"in1 && in2"
布尔值作为测试,但我希望能够评估所有布尔值作为我实际项目的刺痛。in1 和 in2 是具有布尔状态的节点的名称,我得到这样的实际表达式,
logic = logic.replaceAll(curName, (nodes.get(ins.get(j)).getState() ? "true" : "false"));
logic 是与我要评估的逻辑联系的字符串,curname 是当前节点名称,被替换为其布尔值(例如“in1”)它在循环中,因此在评估字符串之前替换所有节点名称,节点是数组列表节点数,ins 是节点数组中输入节点的索引,getState()
返回节点布尔值这工作正常,将逻辑字符串的新值设置为“true && true”。
困难的部分是将字符串评估为布尔值。我发现我可以在这里使用 javax.script 来帮助我。所以我就这样实现了
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("JavaScript");
nodes.get(outs.get(i)).setState((boolean)se.eval(logic));
问题是它每次都评估为假,当我尝试将 eval 返回的对象转换为布尔值并尝试像这样显示它时,
System.out.printLine(String.valueOf((boolean)se.eval(logic)));
它只返回假。
在oracle 的 eval 页面上,我看到还有一些其他参数可以传递给 eval,我是缺少其中一个还是完全不同?
*旁注,这在我未在此处显示的任何代码中都不是问题,我已经使用原始布尔值而不是字符串测试了评估。