[英]using global variable in matches in drools rules
我有这个规则设置为drools。
global String ipv4regex;
rule "Initialize global"
salience 1000
when
then
drools.getWorkingMemory().setGlobal( "ipv4regex", "\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
end
rule "Router"
when
r : Router( Ipaddress matches ipv4regex)
then
System.out.println("Valid ip address");
end
在这里,我正在检查有效的IP地址,但即使我的路由器IP地址有效,我的规则“路由器”也没有显示“有效的IP地址”。 这里有什么问题以及如何在匹配中使用全局变量?
全局变量的设置发生得太晚了。 您必须在插入任何事实之前执行此操作。
这是由于全局变量未被规则引擎监控 - 与事实相反,其中(通过修改或更新公布)更改被重新考虑,从而导致重新评估。
后来
您可以在DRL中为此目的声明事实类型:
declare Const
pattern: String
end
rule initConst
salience 1000
when
then
insert( new Const( "\\b(25[0-5]|2..." ) );
end
rule "Router"
when
Const( $pat: pattern )
r : Router( Ipaddress matches $pat )
then
System.out.println("Valid ip address");
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.