我只是好奇为什么我的Eclipse Drools编译器(6.5.0)在For循环中的语句末尾需要分号,如下所示:
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循环中的第一行或第二行中删除分号,我会得到一个“意外的token”错误,但如果我从循环中的最后一行中删除它,就不会出现这种错误。
是不是因为Drools将RHS行作为一条语句进行计算,所以它们必须在任何循环中分开?
注意:我知道假设不需要分号并不是编写代码的最佳实践,但是我在实验时遇到了这个问题,我只是想知道编译器错误的原因。谢谢。
发布于 2017-09-25 21:33:19
我想答案是因为MVEL本身。Drools可能会将整个代码块委托给MVEL进行评估和执行。
根据this guide的说法,在MVEL中,如果你有一条语句,或者在脚本的最后一条语句中,分号的使用不是强制性的。
希望能有所帮助,
https://stackoverflow.com/questions/46403885
复制相似问题