条件组中包含运算符的Drools决策表不工作

条件组中包含运算符的Drools决策表不工作,drools,Drools,Drools 6.2最终 我正在使用一个具有以下表达式的决策表 <row 10> CONDITION <row 12> classList $param 我有一个类似的规则适用于其他行 <row 42> contains('AAA') || contains('BBB') || contains('CCC') 在组条件中使用contains操作符似乎有些奇怪。如何正确表达你的想法 谢谢 -lp在我看来,表条目并不正确,而且您还没有显示classList的J

Drools 6.2最终

我正在使用一个具有以下表达式的决策表

<row 10> CONDITION
<row 12> classList $param
我有一个类似的规则适用于其他行

<row 42> contains('AAA') || contains('BBB') || contains('CCC')
在组条件中使用contains操作符似乎有些奇怪。如何正确表达你的想法

谢谢


-lp

在我看来,表条目并不正确,而且您还没有显示classList的Java代码-解释是List相当模糊

如果插入类别列表的事实,则以下条件条目适用于5.5.0:

CONDITION
List
this (contains $1 || contains $2) && contains $3
match some funny numbers
42, 142, 100
如果列表是SomeClass类中的字段intList,则可以使用

CONDITION
SomeClass
intList (contains $1 || contains $2) && contains $3
match some funny numbers
42, 142, 100
注意:我显示了一列的前四行加上一行以触发规则的创建

编辑以显示另一个变体正在工作:

CONDITION
$x: Country()
cities $param
match values in a List
(contains 'Rome' || contains 'Milan') && contains 'Naples'
编译规则是

rule "match cities"
when
    $x: Country(cities (contains 'Rome' || contains 'Milan') && contains 'Naples')
then
    //...
end
令人恼火的是,您不能使用引号来分隔字符串文字,但撇号可以工作

如果这在6.2.0中不起作用,这是一个回归,您应该报告Drools JIRA上的一个bug

作为一种解决方法,考虑分离和分离:

CONDITION                           | CONDITION
                $x: Country()
cities $param                       | cities $param
alternatives                        | alternatives
contains 'Rome' || contains 'Milan' | contains 'Naples'
请注意,第二行已加入单元格!生成的DRL应该是

rule "match cities"
when
    $x: Country(cities contains 'Rome' || contains 'Milan', cities contains 'Naples')
then
    //...
end

事实类型是什么?学生名单?它的列表字段名是什么?您在下面的单元格中输入什么来替换$param?-没有左操作数就不能使用任何二元运算符-这当然不奇怪。@laune我编辑了我的问题来回答你的问题。类列表是列表,规则是分组的“包含”。你误解了我的问题。我显然没有把我原来的问题说清楚。条件语句只是第一行,即classList$param。规则本身在每一行中都有要匹配的操作数和值,因为有任意数量的值要匹配。也就是说,它不是简单地为每个规则匹配3个参数。有道理吗?
rule "match cities"
when
    $x: Country(cities (contains 'Rome' || contains 'Milan') && contains 'Naples')
then
    //...
end
CONDITION                           | CONDITION
                $x: Country()
cities $param                       | cities $param
alternatives                        | alternatives
contains 'Rome' || contains 'Milan' | contains 'Naples'
rule "match cities"
when
    $x: Country(cities contains 'Rome' || contains 'Milan', cities contains 'Naples')
then
    //...
end