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 語句)被認為是非常不好的做法。大多數情況下,應該建立新的規則。

廣告

© . All rights reserved.