我是这个框架的初学者,我正在尝试使用地图而不是Java类。
我的例子如下:
主要方法:
Map<String, Float> mapa = new HashMap<String, Float>();
mapa.put("Height", (float)1.73);
mapa.put("Weight", (float)79.0);
mapa.put("BMI", mapa.get("Weight") /
(mapa.get("Height") * mapa.get("Height")));
ksession.insert(mapa);
rule.drl:
rule "Low BMI"
when
$map : (Map(values("BMI")) < 18.0)
then
System.out.println("You have a low BMI");
end
我想比较规则前置条件中BMI的值,如果这个条件为真,那么我想在下面显示这条消息。
有什么不对?
答案 0 :(得分:17)
你应该写一些类似的东西:
when
$map: Map(this["BMI"] < 18)
then
它应该工作:)
答案 1 :(得分:0)
一般来说,请参阅 Drools doc 7.8.3.3.10. List and Map access 部分...
FWIW:尽管在该参考文献中没有提到下面的更简化的语法,但我发现 [至少对于 Drools 6.2.0
] 是有效的(至少对于 { {1}},在 Map<String, Boolean>
中):
ObjectUnderSpecification
我已经测试过它可以工作。显然,键所在的 Map 的名称甚至不需要被引用......我想只要 rule "you rule name"
when
ObjectUnderSpecification(mapKey == true)
then
// RHS code
end
内的 some Map 有键,那就是得到的进一步评价。 如果您发现任何参考文献反映了我在上面的轶事发现,请在任何参考文献中进行评论或编辑。
(我不知道这是否可以与嵌套地图类似地工作)。
我想这种类型的语法也可以与这里问题中的 ObjectUnderSpecification
一起使用,类似这样(但我还没有测试过这个):
Map<String, Float>