zoukankan      html  css  js  c++  java
  • 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern

    LHS简介

    在规则文件组成章节,我们已经了解了LHS的基本使用说明。LHS是规则条件部分的统称,由0个或多个条件元素组成。前面我们已经提到,如果没有条件元素那么默认就是true。 
    没有条件元素,官方示例:

    rule "no CEs"
    when
        // empty
    then
        ... // actions (executed once)
    end
    
    // The above rule is internally rewritten as:
    
    rule "eval(true)"
    when
        eval( true )
    then
        ... // actions (executed once)
    end
    View Code

    如果有多条规则元素,默认它们之间是“和”的关系,也就是说必须同时满足所有的条件元素才会触发规则。官方示例:

    rule "2 unconnected patterns"
    when
        Pattern1()
        Pattern2()
    then
        ... // actions
    end
    
    // The above rule is internally rewritten as:
    
    rule "2 and connected patterns"
    when
        Pattern1()
        and Pattern2()
    then
        ... // actions
    end
    View Code

    和“or”不一样,“and”不具有优先绑定的功能。因为生命一次只能绑定一个FACT对象,而当使用and时就无法确定声明的变量绑定到哪个对象上了。以下代码会编译出错。

    person : (Person( name == "Romeo" ) and Person( name == "Juliet"))
    View Code

    Pattern (条件元素)

    Pattern元素是最重要的一个条件元素,它可以匹配到插入working memory中的每个FACT对象。一个Pattern包含0到多个约束条件,同时可以选择性的进行绑定

    通过上图可以明确的知道Pattern的使用方式,左边变量定义,然后用冒号分割。右边pattern对象的类型也就是FACT对象,后面可以在括号内添加多个约束条件。最简单的一种形式就是,只有FACT对象,没有约束条件,这样一个pattern配到指定的patternType类即可。

    比如,下面的pattern定义表示匹配Working Memory中所有的Person对象。

    Person()
    View Code

    pattemType并不需要使用实际存在的FACT类,比如下面的定义表示匹配Working Memory中所有的对象。很明显,Object是所有类的父类。

    Object() // 匹配working memory中的所有对象
    View Code

    如下面的示例,括号内的表达式决定了当前条件是否会被匹配到,这也是实际应用中最常见的使用方法。

    Person( age == 100 )
    View Code

    Pattern绑定:当匹配到对象时,可以将FACT对象绑定到指定的变量上。这里的用法类似于java的变量定义。绑定之后,在后面就可以直接使用此变量。

    rule ...
    when
        $p : Person()
    then
        System.out.println( "Person " + $p );
    end
    View Code

    其中前缀$只是一个约定标识,有助于在复杂的规则中轻松区分变量和字段,但并不强制要求必须添加此前缀。

    
    
  • 相关阅读:
    Redis的主从复制
    JVM之jps命令
    ThreadLocal源码分析
    ThreadLocal初体验
    Redis的逐出算法
    Redis的删除策略
    DagScheduler 和 TaskScheduler
    数据挖掘的数据预处理
    日志实时收集和计算的简单方案
    spark ml 的例子
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/9439371.html
Copyright © 2011-2022 走看看