java dsl 规则_java – Drools DSL – 如何在规则中使用括号

Drools版本:6.3.0.Final

POJO:

public class Person {

private Integer age;

private Integer childrens;

private String name;

private String address;

(...)

}

DSL文件:

[condition][]and=&&

[condition][]or=||

[condition][]is less than or equal to=<=

[condition][]is less than=<

[condition][]is greater than or equal to=>=

[condition][]is greater than=>

[condition][]is equal to===

[condition][]There is a [Pp]erson with=$person:Person()

[condition][].{field:\w*} {operator} {value:\d*}={field} {operator} {value}

(...)

DSRL文件:

package ;

import .*

global org.slf4j.Logger logger;

expander .dsl;

rule "R1"

when

There is a person with

.age is greater than 10 or .chidldrens is less than 2 and .name is equal to ""

then

(...)

end

rule "R2"

when

There is a person with

(.age is greater than 10 or .childrens is less than 2) and .name is equal to ""

then

(...)

end

DRL(来自R1):

(...)

rule "R1"

when

$person:Person(age > 10 || childrens < 2 && name = "")

then

(...)

end

(...)

DRL(来自R2):未生成规则.

如果我删除它的括号,但是使用括号,则无法正确生成DRL文件.所以只有R2规则正在运行,但我的目标是R1规则.

任何的想法?

解决方法:

我想我发现了一个可能的解决方案:

DSL文件(替换为这个新条件):

[condition][]There is a [Pp]erson that {constraints}=$person:Person({constraints})

[condition][]{field:\w*}\s+{operator}\s+{value:\s*}={field} {operator} {value}

DSRL(定义从第一行开始的约束):

(...)

There is a person that ((age is greater than 10 or chidldrens is less than 2) and name is equal to "")

(...)

DRL(生成):

(...)

$person:Person((age > 10 || childrens < 2) && name == "name")

(...)

使用这个新的DSL定义括号,它正在按预期工作.你怎么看@laune?

标签:java,jboss,dsl,drools,drools-flow

来源: https://codeday.me/bug/20190628/1313687.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值