在drools规则中动态忽略属性值

时间:2015-03-02 05:46:11

标签: java drools

我有一种情况我需要在运行时忽略任何属性值。

$applicant : Applicant ($age : age, $gender : gender, $income : income)
$person : Person( age == $age, gender == $gender, income == $income )

在收入属性中说,我说的是任何值;这意味着如果der是应用程序收入属性中指定的任何值,那么它也可以,否则它应该执行规则,因为任何值都是可接受的。

请帮助实现此目的。

由于

3 个答案:

答案 0 :(得分:1)

对于动态切换,您需要另一个具有布尔属性的对象PersonControl

$applicant : Applicant ($age : age, $gender : gender, $income : income)
PersonControl( $igAge: igAge, $igGender: ifGender, $igIncome: igIncome)
$person : Person( age == $age || $igAge,
                  gender == $gender || $igGender,
                  income == $income || $igIncome )

如果需要单独完成这些评估,您可能必须为每个申请人评估插入/撤消(或修改)PersonControl。

如果您想要声明任何值,您必须考虑可以使用的值,例如-1表示数值:

$applicant : Applicant ($age : age, $gender : gender, $income : income)
$person : Person( age == $age ,
                  gender == $gender,
                  income == $income || == -1 )

答案 1 :(得分:0)

$applicant : Applicant ($age : age, $gender : gender, $income : income)

$age : age是一项任务,以便稍后可以提及$age。同样具有性别和收入。

$person : Person( age == $age, gender == $gender, income == $income )

在这里,您要检查每个人对象的年龄,以及性别和收入。所以只是忽略它们中的任何一个,只需将它们从等式检查中删除即可。

即。因此,删除您不想比较相等的条件,例如忽视收入:

rule "Compare Applicants"
salience 155 
when
    $applicant : Applicant ($age : age, $gender : gender)
    $person : Person( age == $age, gender == $gender )
then    
// do stuff
end

忽略所有内容,即将每个申请人与每个人进行比较并执行then条款

when
 $applicant : Applicant ()
    $person : Person()
then
// do your stuff
end

答案 2 :(得分:-1)

您是否可以将申请人分配到$applicant,然后在$age子句中设置$genderthen

rule "do application"
when
    $applicant : Applicant()
    $person : Person( age == $age, gender == $gender, income == $income )
then
    $age = $applicant.getAge()
    // do more stuff
end