2

我正在尝试在 Drools Expert 中编写规则。在when规则部分,我检查了Application对象的一些属性。该对象包含一个列表,我想检查一堆规则是否适用于该列表中 SomeOtherType 的所有对象。仅当约束对该列表中的所有对象都有效时,该规则才应触发。

rule "Application eligible"
    when
        app : Application(
               some constrains
               & write some constraints for all objects in app.getList() (a method
               that returns a List<SomeOtherType> object)
        )
    then 
        // application is eligible
end
4

2 回答 2

3

SomeOtherType如果您还没有将所有实例也插入工作内存中。如果您想检查所有 SomeOtherType 的颜色是否为红色,请尝试这样的操作:

rule "Application eligible"
when
    $app : Application()
    forall( $x : SomeOtherType( application == $app ) 
            SomeOtherType( this == $x, color == RED ) )
then 
    // application is eligible
end
于 2011-02-26T16:17:22.910 回答
3

我还发现了另一种 hack-y 方法来做到这一点,如果你想避免不得不像 Geoffry 建议的那样使用 collect 将你的对象插入到工作内存中:

rule "Person has all brothers"
  when
    $person : Person(siblings != null, siblings.size > 0) 
    List(size == siblings.size) from collect (Person(sex != null, sex == "m") from $person.siblings)
  then
    #Person has all brothers
  end
于 2014-07-21T12:15:46.277 回答