我用drools的决策表时,一个事实有两个属性,为什么转换成drl文件后,有一个属性跑到括号外面了,举个详细的例子
时间: 2024-02-05 21:04:55 浏览: 155
好的,下面是一个详细的例子:
假设我们有一个决策表,其中有一个名为"Person"的事实,该事实有两个属性,分别为"name"和"age",如下图所示:
| Rule No. | Condition 1 | Action 1 |
| -------- | ----------- | ----------- |
| 1 | name=="Bob" | Person.setAge(18) |
| 2 | name=="Tom" | Person.setName("Tom") |
在这个决策表中,我们将每个属性放在了不同的列中。当我们将这个决策表转换成drl文件时,会生成以下代码:
```
rule "rule 1"
when
Person(name=="Bob")
then
Person.setAge(18);
end
rule "rule 2"
when
Person(name=="Tom")
then
Person.setName("Tom");
end
```
可以看到,在生成的drl文件中,Person事实的两个属性被放在了不同的括号中,导致了一个属性跑到括号外面的情况。如果我们将决策表中的两个属性放在同一列中,如下图所示:
| Rule No. | Condition 1 | Action 1 |
| -------- | ---------------- | -------------------------- |
| 1 | name=="Bob", age==18 | Person.setAge(18) |
| 2 | name=="Tom", age>=0 | Person.setName("Tom") |
这样,在生成的drl文件中,Person事实的两个属性就会被放在同一个括号中,不会出现一个属性跑到括号外面的情况了,生成的drl文件如下:
```
rule "rule 1"
when
Person(name=="Bob", age==18)
then
Person.setAge(18);
end
rule "rule 2"
when
Person(name=="Tom", age>=0)
then
Person.setName("Tom");
end
```
希望这个例子可以帮助你理解为什么会出现一个属性跑到括号外面的情况,以及如何解决这个问题。
阅读全文