在我们的ILOG规则irl文件中,我们多次出现从集合中设置变量并从集合中设置另一个不等于第一个对象的变量
student1: com.company.bom.Student() in all_students;
student2: com.company.bom.Student(!(?this.equals(student2))) in all_students;
在ILOG中,这些行只返回集合中的第一个和第二个对象吗?
以下是在drl规则文件中在Drools中执行相同操作的最佳方法吗?
student1: com.company.bom.Student() from all_students.get(0);
student2: com.company.bom.Student() from all_students.get(1);
答案 0 :(得分:1)
你应该能够检查你的ILOG做了什么,所以我只是回答了Drools部分。
在Drools中,可以使用from <expression>
从某些Collection中获取对象。因此,你确实可以写
University( $roster: roster )
$student1: Student() from $roster.get(0)
$student2: Student() from $roster.get(1)
此规则会对名单集合中的前两名学生触发一次,但如果学生人数少于两名,则必然会引发异常。
University( $roster: roster )
$student1: Student() from $roster
$student2: Student( this != $student1 ) from $roster
此规则针对每对有序的不同学生开火,其中一对特定对导致两次规则发射。