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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【java】drools入门之LHS和RHS语法

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【java】drools入门之LHS和RHS语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很自然地,筆者將分成兩部分進行講解。

1. LHS語法

LHS 是規則條件部分的統稱,由 0 個或多個條件元素組成。前面我們已經提到,如果沒有條件元素那么默認就是true。

1.1 Pattern 綁定

當匹配到對象時,可以將 FACT 對象綁定到指定的變量上。這里的用法類似于 java 的變量定義。綁定之后,在后面就可以直接使用此變量。

rule ...when$p : Person()thenSystem.out.println( "Person " + $p );end // 2 person 的 age 屬性值相同 Person( $firstAge : age ) // 綁定 Person( age == $firstAge ) // 約束表達式

?其中,前綴$只是一個約定標識,有助于在復雜的規則中輕松區分變量和字段,但并不強制要求必須添加此前綴。

1.2 訪問 JavaBean 中的屬性

任何一個 JavaBean 中的屬性都可以訪問,不過對應的屬性要提供 getter 方法或isProperty 方法。比如:

Person( age == 50 ) // 與上面擁有同樣的效果 Person( getAge() == 50 )

1.3 內部類分組訪問

通常情況,我們訪問一個內部類的多個屬性時會有如下的寫法:?

Person( name == "mark", address.city == "london", address.country == "uk" )

1.4 Java 表達式

在 pattern 的約束條件中,可以任何返回結果為布爾類型的 java 表達式。當然,java 表達式也可以和增強的表達式進行結合使用,比如屬性訪問。可以通過使用括號來更改計算優先級,如在任一邏輯或數學表達式中。?

Person( age > 100 && ( age % 10 == 0 ) )

也可以直接使用 java 提供的工具方法來進行操作計算:

Person( Math.round( weight / ( height * height ) ) < 25.0 )

在使用的過程中需要注意,在 LHS 中執行的方法只能是只讀的,不能在執行方法過程中改變 FACT 對象的值,否則會影響規則的正確執行。

1.5?matches 正則表達式

可使用 Java 的正則表達式進行字符串的匹配,通常情況下使用正則表達式字符串進行匹配,但也支持變量值為正確的表達式的方式。此操作符僅適用于字符串屬性。如果屬性值為 null,匹配的結果始終為 false。

Cheese( type matches "(Buffalo)?\\S*Mozzarella" )

not matches 方法與 matches 相同,唯一不同的是返回的結果與之相反。

Cheese( type not matches "(Buffalo)?\\S*Mozzarella" )

1.6?contains 和 memberOf 操作符

contains 判斷一個集合屬性或元素是否包含指定字符串或變量值。僅適用于集合屬性。也可以用于替代 String.contains()來檢查約束條件。not contains 用法與之相同,結果取反。

CheeseCounter( cheeses contains "stilton" ) // 包含字符串 CheeseCounter( cheeses contains $var ) // 包含變量 Cheese( name contains "tilto" ) Person( fullName contains "Jr" ) String( this contains "foo" )

memberOf 用來檢查屬性值是否為集合,此集合的表示必須為變量。not memberOf 使用方法相同,結果取反。

CheeseCounter( cheese memberOf $matureCheeses )

1.7 字符串操作符?str 和 in

str 操作用來比較一個字符串是否以指定字符串開頭或結尾,有可以用于比較字符串的長度。

Message( routingValue str[startsWith] "R1" ) Message( routingValue str[endsWith] "R2" ) Message( routingValue str[length] 17 )

in 和 notin 用來匹配一組數據中是否含一個或多個匹配的字符串,使用的方法與數據庫中 in 的使用方法相似。待匹配的數據可以是字符串、變量。

Person( $cheese : favouriteCheese ) Cheese( type in ( "stilton", "cheddar", $cheese ) )?

2. THS語法

RHS 是滿足 LHS 條件之后進行后續處理部分的統稱,該部分包含要執行的操作的列表信息。RHS 主要用于處理結果,因此不建議在此部分再進行業務判斷。如果必須要業務判斷需要考慮規則設計的合理性,是否能將判斷部分放置于 LHS,那里才是判斷條件應該在的地方。

同時,應當保持 RHS 的精簡和可讀性。如果在使用的過程中發現需要在 RHS 中使用 AND 或 OR 來進行操作,那么應該考慮將
一根規則拆分成多個規則。RHS 的主要功能是對 working memory 中的數據進行 insert、update、delete 或 modify 操作,Drools 提供了相應的內置方法來幫助實現這些功能。下面分別介紹:

2.1??insert 函數

insert 的作用與在 Java 類當中調用 KieSession 的 insert 方法效果一樣,都是將 Fact 對象插入到當前的 Working Memory 當中,基本用法格式如下:

insert(newSomething());

調用 insert 之后,規則會進行重新匹配,如果沒有設置 no-loop 為 true 或 lock-on-active?為 true 的規則,如果條件滿足則會重新執行。update、modify、delete 都具有同樣的特性,因此在使用時需特別謹慎,防止出現死循環。

規則文件 insert.drl

package com.rulesimport com.secbro.drools.model.Productrule "insert-check"salience 1when$p : Product(type == GOLD);thenSystem.out.println("insert-check:insert Product success and it's type is " + $p.getType());endrule "insert-action"salience 2whenthenSystem.out.println("insert-action : Toinsert the Product");Product p = new Product();p.setType(Product.GOLD);insert(p); end

打印日志:?

insert-action : To insert the Product insert-check:insert Product success and it's type is GOLD Fire 2 rules! 根據優先級首先執行 insert 操作的規則,然后執行結果檢測。

2.2?update 函數

update 函數可對 Working Memory 中的 FACT 對象進行更新操作,與 StatefulSession 中的 update 的作用基本相同。查看 KnowledgeHelper 接口中的 update 方法可以發現,update函數有多種參數組合的使用方法。在實際使用中更多的會傳入 FACT 對象來進行更新操作。

2.3 delete 函數

將 Working Memory 中的 FACT 對象刪除,與 kession 中的 retract/delete 方法效果一樣。同時 delete 函數和 retract 效果也相同,但后者已經被廢棄。

2.4??modify 函數

modify 是基于結構化的更新操作,它將更新操作與設置屬性相結合,用來更改 FACT 對象的屬性。語法格式如下:

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

其中<fact-expression>必須是 FACT 對象的引用,expression 中的屬性必須提供 setter 方法。在調用 setter 方法時,不必再寫 FACT 對象的引用,編譯器會自動添加。

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

更多內容可以訪問大佬的博客:http://blog.csdn.net/wo541075754

總結

以上是生活随笔為你收集整理的【java】drools入门之LHS和RHS语法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美夜夜爽 | 欧美三区 | 亚洲欧美精品一区二区 | 国产三级全黄 | 成人污在线 | 国产高清在线观看视频 | 国产精品欧美综合 | 91毛片在线观看 | 一本一道精品欧美中文字幕 | 视频二区 | av网站有哪些 | 亚洲女则毛耸耸bbw 边吃奶边添下面好爽 | 日本熟妇一区二区三区四区 | 欧美一级在线看 | 欧美一线高本道 | 国产精品腿扒开做爽爽爽挤奶网站 | 无码人妻久久一区二区三区蜜桃 | 国产自产视频 | 青草视频免费看 | 国产精久久一区二区三区 | 中出在线播放 | 黄视频免费看在线 | 8x8ⅹ国产精品一区二区 | 草比视频在线观看 | 97自拍视频 | 久久曹| 欧美成人一级片 | 中文字幕精品无 | 樱桃视频一区二区三区 | 亚洲精品久久久蜜桃 | 播播开心激情网 | 99热官网| 一区不卡在线观看 | www国产 | 日本国产视频 | 国产调教一区 | 老司机精品福利视频 | 色综合久久久久久久 | 成人在线观看h | 国产精品久久久久久久久晋中 | 欧美日韩123区 | 人操人视频 | 在线观看日本一区 | 久久avav | 国产少女免费观看高清 | 超碰免费公开 | 亚洲视频99| 精品无码国产一区二区三区51安 | 欧美网站在线 | 亚洲αv | 射精一区二区 | 少妇精品无码一区二区三区 | 午夜成人免费视频 | 国产99re| 麻豆成人91精品二区三区 | 小黄网站在线观看 | 在线观看视频色 | 精品国产一区在线观看 | 一级二级av | 亚洲 国产 欧美 日韩 | 久久国产精品免费视频 | 国产伦理在线 | 好看的中文字幕电影 | 国产av电影一区二区三区 | 国产精品久久久久久人妻精品动漫 | 国久久| 肉肉h| 女~淫辱の触手3d动漫 | 手机av在线看 | 日韩高清精品免费观看 | 可以看av的网址 | 日韩有码第一页 | 精品久久久久成人码免费动漫 | 午夜啪啪网 | 精品一区二区久久久久久久网站 | 我和单位漂亮少妇激情 | 国产高清免费 | 激情小说综合 | 538精品一线 | 精品无码av一区二区三区不卡 | 少妇被中出 | 欧美自拍第一页 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 91黑丝美女 | 色视频在线观看 | 日韩一区高清 | 欧美xxxx免费虐 | 自拍亚洲国产 | 最近2019中文字幕大全第二页 | 一个色综合网 | 日本在线高清视频 | 日韩av网站在线观看 | 国产精品久久久久久久久久久久久久久久久久 | 国产精品女优 | 色偷偷资源网 | 激情另类小说 | 又黄又爽的视频在线观看 | av电影在线观看不卡 | 乱亲女h秽乱长久久久 |