Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 6规则项比较_Drools_Rule Engine - Fatal编程技术网

Drools 6规则项比较

Drools 6规则项比较,drools,rule-engine,Drools,Rule Engine,假设我有一个对象类型MyObject,其中包含成员数据someValue和otherValue,我插入两个逻辑规则如下: Rule "Checks Some Value" when $myO : MyObject( someValue == Constants.someValueChecker ) then insertLogical(new SomeValueChecked($myO)); end Rule "Checks Other Value" when

假设我有一个对象类型
MyObject
,其中包含成员数据
someValue
otherValue
,我插入两个逻辑规则如下:

Rule "Checks Some Value"
  when
    $myO : MyObject( someValue == Constants.someValueChecker )
  then
    insertLogical(new SomeValueChecked($myO));
end

Rule "Checks Other Value"
  when
    $myO : MyObject( otherValue == Constants.otherValueChecker )
  then 
    insertLogical(new OtherValueChecked($myO));
end
我的问题是,有没有办法验证这些规则是否针对同一个MyObject实例触发?另外,对于MyObject的特定实例,是否有办法知道这些规则是否已为其触发?

验证是否已为同一对象检查了“some”和“other”值(并假设对
MyObject
的引用保留在成员
MyObject
中):

以及检查两者是否都针对
MyObject
的特定实例触发:

rule "some and other value"
when
    SomeValueChecked( $obj: myObject )
    OtherValueChecked( myObject == $obj )
then
  ...
end
rule "some and other checked for green"
when
    $obj: MyObject( color == Colour.GREEN ) // or some other property
    SomeValueChecked( myObject == $obj )
    OtherValueChecked( myObject == $obj )
then
  ...
end

单独检查“some”或“other”所需的内容应该是显而易见的。

可能值得指出的是,DRL/MVEL
=
操作符使用
hashCode
equals
方法检查对象相等性,而Java操作符检查相同的实例。要检查是否为同一实例触发了规则,最好使用
eval(myObject==$obj)
强制执行Java引用检查。还是有更好的方法?