Drools - 规则语法



正如您所看到的,.drl(规则文件)有其自身的语法,让我们在本节中介绍规则语法的一部分。

规则中的条件

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

  • Account (balance == 200)
  • Customer (name == “Vivek”)

上述条件检查 Account 余额是否为 200 或 Customer 名称是否为“Vivek”。

规则中的变量

Drools 中的变量名以美元符号 ($) 开头。

  • $account − Account( )
  • $account 是 Account() 类的变量

Drools 可以使用所有原生 Java 类型,甚至枚举类型。

规则中的注释

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

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

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

全局变量

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

  • 用于输入参数(例如,可以从会话到会话自定义的常量值)。

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

  • 用于日志记录等服务的入口点,可以在规则中使用。

规则中的函数

函数是一个便利特性。它们可以在条件和结果中使用。函数表示实用程序/帮助程序类的替代方案。例如,

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

方言

方言指定在条件或结果中的任何代码表达式中使用的语法。它包括返回值、evals、内联 evals、谓词、salience 表达式、结果等。默认值为 **Java**。Drools 目前支持另一种称为 **MVEL** 的方言。默认方言可以在包级别指定,如下所示:

package org.mycompany.somePackage
dialect "mvel"

MVEL 方言

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

Salience

Salience 是规则语法的一个非常重要的特性。Salience 用于冲突解决策略来决定首先触发哪个规则。默认情况下,它是主要标准。

我们可以使用 salience 来定义规则的触发顺序。Salience 具有一个属性,该属性采用任何返回 int 类型数字的表达式(正数和负数均有效)。值越高,冲突解决策略选择该规则触发的可能性就越大。

salience ($account.balance * 5)

默认的 salience 值为 0。在仅为某些规则分配 salience 值时,我们应该牢记这一点。

规则语法中还有许多其他功能/参数,但我们在这里只介绍了重要的部分。

规则结果关键字

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

  • **Modify** - 事实的属性可以在规则的 **then** 部分中修改。

  • **Insert** - 基于某个条件,如果为真,则可以将新的事实插入到规则引擎的当前会话中。

  • **Retract** - 如果规则中的特定条件为真,并且您不想对该事实执行任何其他操作,则可以从规则引擎中撤回该特定事实。

**注意** - 在规则结果中使用条件逻辑(if 语句)被认为是非常不好的做法。大多数情况下,应该创建新的规则。

广告