📜  Drools-规则语法

📅  最后修改于: 2020-10-15 10:57:00             🧑  作者: Mango


正如您看到的.drl(规则文件)具有自己的语法一样,让我们在本章中介绍Rule语法的某些部分。

规则条件

规则可以包含许多条件和模式,例如-

  • 帐户(余额== 200)
  • 客户(名称==“ Vivek”)

以上条件检查帐户余额是否为200或客户名称为“ Vivek”。

规则中的变量

Drools中的变量名称以Dollar($)符号开头。

  • $ account-帐户()
  • $ account是Account()类的变量

Drools可以使用所有本机Java类型甚至Enum。

规则中的注释

特殊字符#或//可用于标记单行注释。

对于多行注释,请使用以下格式:

/*
   Another line
   .........
   .........
*/

全局变量

全局变量是分配给会话的变量。出于各种原因,可以使用它们,如下所示-

  • 对于输入参数(例如,可以在会话之间自定义的常量值)。

  • 对于输出参数(例如,报告-一条规则可以将一些消息写入全局报告变量)。

  • 可以在规则内使用的服务(如日志记录)的入口点。

规则中的功能

功能是一项便利功能。它们可以用于条件和后果。函数表示实用程序/帮助程序类的替代方法。例如,

function double calculateSquare (double value) {
   return value * value;
}

方言

方言指定条件或结果中任何代码表达式中使用的语法。它包括返回值,评估,内联评估,谓词,显着性表达式,结果等。默认值为Java 。 Drools当前还支持一种叫做MVEL的方言。可以在包级别指定默认的方言,如下所示:

package org.mycompany.somePackage
dialect "mvel"

MVEL方言

MVEL是用于基于Java的应用程序的一种表达语言。它支持字段和方法/获取器访问。它基于Java语法。

显着性

显着性是规则语法的一个非常重要的功能。解决冲突策略使用显着性来决定首先触发哪个规则。默认情况下,这是主要标准。

我们可以使用显着性来定义触发规则的顺序。显着性具有一个属性,该属性采用任何返回整数类型的表达式(正数和负数均有效)。该值越高,冲突解决策略就会激发一条规则来执行。

salience ($account.balance * 5)

显着性默认值为0。仅在为某些规则分配显着性值时,应牢记这一点。

规则语法中还有很多其他功能/参数,但是在这里我们仅涵盖了重要的功能/参数。

规则后果关键字

规则结果关键字是规则的“ then ”部分中使用的关键字。

  • 修改-事实的属性可以在规则的随后部分中进行修改。

  • 插入-根据某些条件,如果为true,则可以将新事实插入规则引擎的当前会话。

  • 撤消-如果规则中的特定条件为真,并且您不想对该事实采取其他任何措施,则可以从规则引擎撤回该特定事实。

–在规则结果中包含条件逻辑(如果语句)被认为是非常不好的做法。大多数时候,应该创建一个新规则。