Drools規則語法


正如你看到的.drl(規則檔案)都有自己的語法,讓我們蓋這個章介紹規則語法的某些部分。

在規則中的條件

規則可以包含很多的條件和模式,如:

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

上述條件檢查帳戶餘額是200或客戶名稱是 “Vivek”.

在規則中的變數

在Drools中的變數名稱以美元($)符號開始。

  • $account : Account( )
  • $account is the variable for Account() class

Drools可與所有本地Java型別,甚至列舉工作。

在規則中的註釋

特殊字元,# 或 //,可用於標記單行注釋。

對於多行注釋,請使用以下格式:

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

全域性變數

全域性變數分配給對談變數。它們可用於各種原因如下:

  • 對於輸入引數(可從對談客製化對談。例如,常數值)。

  • 對於輸出引數(例如,報告,規則可以寫一些訊息給全域性報表變數)。

  • 切入點的服務,如紀錄檔記錄,這可以在規則中使用。

在規則中的函式

函式是一個方便的功能。它們可以在條件和後果使用。函式代表的替代工具/輔助類。例如,

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

方言

方言指定任何程式碼的表達是在條件或因此所使用的語法。它包括返回值,evals,內聯evals,謂詞突性表示式,後果,並依此類推。預設值是Java。目前,Drools支援多了一個叫做方言MVEL。預設方言可以指定在包級別如下:

package org.mycompany.somePackage
dialect "mvel"

MVEL 方言

MVEL是基於Java的應用程式的表示式語言。它支援欄位和方法/getter存取。它是基於Java的語法。

突顯

突顯是規則語法的一個非常重要的特點。突顯使用的衝突解決策略,以決定哪些規則首先觸發。預設情況下,它是主要標準。

我們可以用突性來定義的擊發規則的順序。突顯有一個屬性,這需要一個返回數位型別為int(正數和負數是有效)的任何表示式。該值越高,就越有可能的規則將被拾起的衝突解決策略觸發。

salience ($account.balance * 5)

預設的顯著值是0分配顯著值只有一些規則時,我們應該記住這一點。

有很多的規則語法等特性/引數,但我們只涵蓋了重要的位置。

規則後果關鍵詞

規則後果關鍵字是規則“then”的一部分使用的關鍵字。

  • Modify – fact屬性可在隨後部分的規則進行修改。

  • Insert – 基於一些條件,如果true,可以插入一個新的事實到規則引擎對談。

  • Retract – 如果一個特定的條件是一個true的規則,則不採取其他任何就事實,可以從規則引擎收回特定事實。

注意:它被認為是一個非常不好的做法,有一個條件邏輯(if語句)規則的後果之內。大多數時候,一個新的規則應該被建立。