2017-09-25 9 views
0

私は私のEclipse Droolsのコンパイラ(6.5.0)は以下のように、Forループ内の文の最後にセミコロンを必要とする理由として、単に好奇心:DroolsのMVEL方言 - セミコロン要件

Map businessRulesRequest = $root.containsKey("BusinessRulesRequest") ? $root.get("BusinessRulesRequest") : null 
Map quoteRequest = businessRulesRequest!=null && businessRulesRequest.containsKey("QuoteRequest") ? businessRulesRequest.get("QuoteRequest") : null 
List resultsByKey = quoteRequest!=null && quoteRequest.containsKey("resultsByKey") ? quoteRequest.get("resultsByKey") : new ArrayList() 

for (Map search : resultsByKey) { 
    Map searchInfo = (search.containsKey("searchInfo") ? search.get("searchInfo") : null); 
    String searchName = searchInfo!=null && searchInfo.containsKey("searchName") ? searchInfo.get("searchName").toString() : ""; 
    List results = (searchName=="quotesMotor" && search.containsKey("results") ? search.get("results") : new ArrayList()); 
} 

Forループの1行目または2行目からセミコロンを削除すると、ループの最後の行から削除すると「予期しないトークン」エラーが発生します。

DroolsはRHS行を1つのステートメントとして評価するため、ループ内で分離する必要がありますか?

メモ:セミコロンは必須ではないと仮定してコードを作成するのはベストプラクティスではありませんが、私は実験中にこの問題に遭遇し、コンパイラエラーの理由を知りたいと思っています。ありがとう。

答えて

0

答えはMVEL自体のためです。 DroolsはMVELにコード全体を委託して評価し実行することがあります。

this guideによると、MVELでは、1つのステートメントがある場合、またはスクリプトの最後のステートメントでセミコロンを使用する必要はありません。

は、それが助け

+0

感謝を願って、そして「あれば」それが扱うようにセミコロンが行の末尾に追加されていない場合、それは扱われますので、はい、それは、などの単一ラインなどのコンテンツ、「ため」、に見えます単一のステートメントとして。安全であるために、私が推測するすべての行にセミコロンを追加することをお勧めします。 – Neil