繁体   English   中英

在drools规则中使用匹配中的全局变量

[英]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地址”。 这里有什么问题以及如何在匹配中使用全局变量?

全局变量的设置发生得太晚了。 您必须在插入任何事实之前执行此操作。

这是由于全局变量未被规则引擎监控 - 与事实相反,其中(通过修改或更新公布)更改被重新考虑,从而导致重新评估。

  • 在Java代码中预先设置全局。
  • 在Java类中使用静态final visible
  • 使用包含带有regec的String的另一个事实。
  • 使用正则表达式的字符串文字。

后来

您可以在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM