日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

drools rule (三) RHS语法详解

發布時間:2023/12/14 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 drools rule (三) RHS语法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 用法

右手邊(RHS)是規則的后果或行動部分的通用名稱;?此部分應包含要執行的操作列表。在規則的RHS中使用命令式或條件式代碼是不好的做法;?作為一項規則應該是原子性的 - “當這個,然后做這個”,而不是“當這個,也許這樣做”。規則的RHS部分也應保持較小,從而保持其聲明性和可讀性。如果您發現在RHS中需要命令式和/或條件代碼,那么您可能應該將該規則分解為多個規則。RHS的主要目的是插入,刪除或修改工作內存數據。為了幫助您,您可以使用一些方便的方法來修改工作記憶;?無需首先引用工作內存實例。

  • update(object, handle);將告訴Drools引擎一個對象已經改變(一個已經綁定到LHS上的東西)并且可能需要重新考慮規則。
  • update(object);也可以使用;?在這里,Knowledge Helper將通過身份檢查為您查找傳遞的對象的事實句柄。(請注意,如果監聽了插入Drools引擎的Java bean的屬性,則應該避免在對象更改時調用update())。在事實的字段值發生更改后,您必須在更改另一個事實之前調用update,否則您將導致Drools引擎中的索引出現問題。modify關鍵字可以避免此問題。
  • insert(newSomething());會將你創作的新對象放入Working Memory中。
  • insertLogical(newSomething());類似于insert,但是當沒有更多事實支持當前觸發規則的true時,對象將被自動刪除。
  • delete(handle);從Working Memory中移除一個對象。

這些便捷方法基本上是為你提供了可以快速使用的KnowledgeHelper實例(可以從規則文件訪問工作內存)的宏。預定義KnowledgeHelper類型變量drools允許您調用其他幾個有用的方法。(KnowledgeHelper有關更高級的操作,請參閱界面文檔)。

  • 調用drools.halt()立即終止規則執行。當當前會話是通過fireUntilHalt()進入工作區時,必須調用drools.halt()將控制權返回。

  • 方法insert(Object o),update(Object o)并且delete(Object o)也可以在drools上調用,但由于他們經常使用,所以可以忽略對象引用直接被調用。

  • drools.getWorkingMemory()返回WorkingMemory對象。

  • drools.setFocus( String s)?將焦點設置為指定的議程組。

  • drools.getRule().getName(),從規則的RHS調用,返回規則的名稱。

  • drools.getTuple()返回與當前正在執行的規則匹配的Tuple?,drools.getActivation()傳遞相應的激活。(這些調用對于記錄和調試很有用。)

完整的Knowledge Runtime API通過另一個預定義KieContext類型的變量kcontext公開。它的方法getKieRuntime()提供了一個KieRuntime類型的對象,這反過來又提供了對大量方法的訪問,其中許多方法對編碼RHS邏輯非常有用。

  • 調用kcontext.getKieRuntime().halt()立即終止規則執行。

  • 訪問者getAgenda()返回對此會話的Agenda的引用,該會話Agenda又提供對各種規則組的訪問:?activation groups, agenda groups, and rule flow groups。一個相當普遍的范例是激活一些議程組,這可以通過冗長的call來完成:

    // give focus to the agenda group CleanUp kcontext.getKieRuntime().getAgenda().getAgendaGroup( "CleanUp" ).setFocus();(你可以使用drools.setFocus( "CleanUp" )實現相同的功能)

    ?

  • 要運行查詢,請調用getQueryResults(String query),然后可以處理結果,如“?查詢”一節中所述。使用kcontext.getKieRuntime().getQueryResults()或使用drools.getKieRuntime().getQueryResults()是從規則的RHS運行查詢的正確方法,也是唯一受支持的方法。

  • 處理事件管理的一組方法允許您為Working Memory和Agenda添加和刪除事件監聽器。

  • 方法getKieBase()返回KieBase對象,系統中所有Knowledge?的主干以及當前會話的發起方。

  • 您可以用setGlobal(…?),getGlobal(…?)和getGlobals()管理全局。

  • 方法getEnvironment()返回運行時Environment,它的工作方式與您所知的操作系統環境非常相似。

?

2 modify

此語言擴展提供了fact?更新的結構化方法。它將更新操作與許多setter調用相結合,以更改對象的字段。這是modify語句的語法架構:

modify ( <fact-expression> ) {<expression> [ , <expression> ]* }

帶括號的<fact-expression>必須生成事實對象引用。塊中的表達式列表應包含給定對象的setter調用,而不需要通常的對象引用(編譯器自動添加)。該示例說明了一個簡單的事實修改。

rule "modify stilton" when$stilton : Cheese(type == "stilton") thenmodify( $stilton ){setPrice( 20 ),setAge( "overripe" )} end

當與細粒度屬性改變監聽器結合使用時,使用修改語句的優點尤其明顯。有關詳細信息,請參閱相應部分。

?

總結

以上是生活随笔為你收集整理的drools rule (三) RHS语法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。