在我们的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);
您应该能够检查您的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
该规则为每一对不同的学生触发,其中一对特定的学生导致两个规则触发。