0

テストとしてブール値を評価しようとして"in1 && in2"いますが、実際のプロジェクトのスティングとしてすべてのブール値を評価できることを願っています。in1 と in2 は、ブール状態を持つノードの名前です。実際の式は次のようになります。

logic = logic.replaceAll(curName, (nodes.get(ins.get(j)).getState() ? "true" : "false"));

logic は評価したいロジックに接続する文字列です。curname は現在のノード名で、ブール値 (たとえば "in1") に置き換えられます。ループ内にあるため、文字列が評価される前にすべてのノード名が置き換えられます。nodes は配列リストです。ノードの 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)); 

問題は、毎回 false と評価されることです。eval によって返されたオブジェクトをブール値としてキャストして、そのように表示しようとすると、

System.out.printLine(String.valueOf((boolean)se.eval(logic)));

false を返すだけです。

eval に関するオラクルのページでは、 evalに渡すことができる他のパラメーターがいくつかあることがわかります。そのうちの1つが欠けていますか、それともまったく別のものですか?

*ちなみに、ここに示していないコードでは問題ありません。文字列ではなく生のブール値で評価をテスト済みです。

4

1 に答える 1