freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

drools使用手冊第三章-展示頁

2024-11-26 04:41本頁面
  

【正文】 要更多的控制,使用斷言約束。 圖 . Literal Constraints 數(shù)字 所有標(biāo)準(zhǔn)的 Java 數(shù)字原型都支持 有效操作 : ? == ? != ? ? ? = ? = 例 . Numeric Literal Constraint Cheese( quantity == 5 ) 日期 當(dāng)前默認(rèn)只支持‘ ddmmyyyy’這樣的日期格式類型。 Null 注意:你可以使用 ==和 !=將字段與 null 關(guān)鍵字進(jìn)行比較,象Cheese(type!=null)。 Matches操作只能在字符串字段上可用, contains 和 excludes 操作只能在集合類型上可用。那些操作可用依賴于字段的類型。例如getter 方法是 getURI,則訪問屬性名為 URI,因為在 get 后面有超過一個的連續(xù)大寫字母,這完全遵循 JavaBean 標(biāo)準(zhǔn)。 . JavaBeans as facts 作為 facts 的 javabean JavaBeans 注意: JavaBean 約定被遵循,但是從上面所示,你可以使用非 getter方法,而通過使用其它方法的全名 。如果你使用 Java5,則你可以獲得最好的效果(可以讓編譯器為你自動封箱),如果你使用 JDT 語法編譯器, Drools 將遵循它,如果是 JANINO 則不支持 Java5。 注意,如果原類型被用于一個字段, Drools 將自動對它們封箱成相應(yīng)的對象類型(甚至于你使用 ),在 中的代碼表達(dá)式或代碼段中是沒有自動解封功能的。在這時,調(diào)用方式應(yīng)當(dāng)是: Cheese(toString==? ),使用方法的全名的正確拼寫但不要括號。 示例,查閱前面的 Cheese 類,這個: Cheese( type==?)使用了實例的 getType()方法。如果你的模型對象使用 java bean 模式, fields 由 getXXX 或 isXXX 方法提供(這些方法是無參數(shù),有返回值的)。 這里 field 的意義不是指類的公共或私有成員的字段。 . Field Constraints 字段約束 字段約束針對 fact 對象,使得工作引擎可以從 working memory 中選擇出匹配的對象。 圖 . Column 例 . Bound Column cheapStilton : Cheese( type == stilton, price 10 ) 這個與前面例子類似,但是在這里我們將一個變量綁定到規(guī)則引擎匹配到的Chesse 實例上。第一個例子沒有約束,將匹配所有在 Working Memory中的 Cheese的實例,不考慮實例的字段值是什么。如果我們要對三個對象 Person、 Person 和 Pet進(jìn)行匹配,我們將有一個三個元素的數(shù)組;在 Drools 中我們稱這樣的一個 facts列表為組元( tuple),在數(shù)組中的每一個元素成為一個 Column[譯者注:很難準(zhǔn)確表達(dá),保留原英文 ]。 . duration 持續(xù)時間 默認(rèn)值 : 無默認(rèn)值 類型 : long 例 . 一些屬性的示例 rule my rule salience 42 agendagroup number 1 when ... . Column 圖 . Column 例 . Column Cheese( ) Cheese( type == stilton, price 10 ) 一個規(guī)則由一或多個對象類型的字段約束組成。Activationgroup 屬性可以是任何字符,只要所有你需要放在同一個組中的規(guī)則中的 activationgroup 屬性是相同的即可。 . activationgroup 默認(rèn)值 N/A 類型 : String 在同名 activationgroup 中的規(guī)則將以互斥的方式激發(fā)。只有在具有焦點的 agenda group 中的規(guī)則才能夠執(zhí)行。優(yōu)先級數(shù)字高的規(guī)則會比優(yōu)先級低 的規(guī)則先執(zhí)行。設(shè)置 noloop 為 true 可以阻止該規(guī)則被再次激活。如果你提供了 Property Change Listeners(屬性變更監(jiān)聽器)給設(shè)置到引擎中的 java beans 對象,當(dāng)對象改變時可以不用調(diào)用 modify 方法,引擎也可以得到通知。 將對象從 working memory 中刪除 這些有用的方法是對 KnowledgeHelper 接口實例所提供的方法的一個基本縮影 (查閱 KnowledgeHelper 接口獲得更多高級的操作 )。 與 assert 類似,但當(dāng)沒有 facts 支持引起 assertLogical 的規(guī)則的條件時,使用 assertLogical 設(shè)置的對象自動從working memory 中刪除 。將你建立的新對象放到 working memory 中。 modify(obj)。 實際上 RHS 是一個當(dāng)規(guī)則執(zhí)行時的代碼塊。 為了理解下圖,請查閱下面的細(xì)節(jié)部分: 圖 . Left Hand Side 圖 . pattern . The Right Hand Side 右手元 右手元 (RHS)是對規(guī)則的推論行為的通稱。規(guī)則不能進(jìn)行嵌套。 特性是可選的,最好保持每行一條,如下描述: 規(guī)則的 LHS 部分跟隨 when 關(guān)鍵字( when 最好在單獨(dú)的一行上), RHS 部分跟隨then 關(guān)鍵字(最好也單獨(dú)一行)。 規(guī)則必須有一個名稱,并且在一個包中是唯一的。 . Rule 規(guī)則 圖 . rule 規(guī)則的構(gòu)造顯然是最重要的構(gòu)造。在規(guī)則的推論中調(diào)用一個函數(shù),簡單的使用函數(shù)名稱,并且傳入?yún)?shù)即可,就像方法調(diào)用一樣。傳入 function的參數(shù)就像不同的方法一樣(如果不需要參數(shù)可以為空)。 典型的函數(shù)聲明如下所示: function String calcSomething(String arg) { return hola !。主要使用函數(shù)的優(yōu)點是可以將邏輯保存在一個地方,并且你可以在需要的時候改變函數(shù)(這樣做各有優(yōu)缺點)。 . Function 函數(shù) 圖 . function 相對于正常的 java 類,函數(shù)是在你的規(guī)則代碼中放置語言代 碼的方法。在 DRL 文件中,聲明你已經(jīng)有了一個 EmailService 類型的全局變量,并給它一個名稱為 。 可能的一個例子是 Email服務(wù)。 注意,這些全局變量只是從你的應(yīng)用傳到 Working Memory 的對象的實例。 Global 不會設(shè)置到 Working Memory中,因此當(dāng)全局變量發(fā)生改變時,引擎不會得知;因為這個原因,全局變量不能用在條件約束上,除非這個值不會發(fā)生改變。如果多個包定義了同樣名稱的全局變量,它們必須使用同樣的類型,并且全部指向同一個全局值。這為解析器提供了如何理解你自定義的規(guī)則語言。 Drools 從同名的 java 包中自動導(dǎo)入類。 . no spaces, unlike rule names which allow spaces. In terms of the order of elements, they can appear in any order in the rule file, with the exception of the package and expander statements being at the top of the file, before any rules appear. In all cases, the semi colons are optional. 圖 . package . import 導(dǎo)入 圖 . import Import 標(biāo)記就像 java 中的含義一樣。分號是可選用的。注意,包必須有一個名稱空間,并且使用標(biāo)準(zhǔn)的 java 約定進(jìn)行命名;例如包名不允許空格,不像規(guī)則名稱可以有空格。通常情況下,是將一個包所有的規(guī)則放在聲明包的同樣的文件中,這是完全的自包含。包名也就是名稱空間名,與文件或目錄名稱無關(guān)。包的成員應(yīng)該彼此有一定聯(lián)系,如人力資源的規(guī)則包。引擎在遇到這些注釋時會迅速排除它們。當(dāng)然你可以將這也關(guān)鍵字用作方法等定義的一部 分,例如 notSomething(),這樣沒有問題。避免在你的領(lǐng)域?qū)ο?,屬性,方法,函?shù)以及規(guī)則的其它部分中使用保留字是明智的。如何選擇是你的自由。相信 DSL 對你的應(yīng)用是有用的,它事實上可以讓規(guī)則看起來非常易懂。它用來增加可讀性并避免使用標(biāo)點符號。你可以認(rèn)為這些 dsl 文件也是對你的域模型的映射(它為你提供了一點的隔絕性)。使用了“ expander(擴(kuò)展 )”機(jī)制。 特別注意的是,空白是不重要的,除非在 DSL 中使用,在 DSL 中每一行會先于下一行處理(空白在這里可能有很重要的作用)。僅有的特別的關(guān)鍵字是為了設(shè)置,刪除和修改 facts所用。 LHS 是規(guī)則的條件部分,它遵循下面將提到的語法。 . What makes a rule 規(guī)則具有如下主體結(jié)構(gòu) : rule name ATTRIBUTES when LHS then RHS end 規(guī)則的結(jié)構(gòu)是非常簡單的,許多符號都是不需要的,甚至“ name”兩邊的引號也是可選的。但是你也可以將規(guī)則分開到多個規(guī)則文件中(在這種情況下建議采用 .rule擴(kuò)展名,但不是必需的),分散規(guī)則利于管理巨量規(guī)則的情況。 . 規(guī)則文件 規(guī)則文件通常是以 drl 擴(kuò)展名結(jié)尾。對該技術(shù)非常有興趣的話,你可以查閱“ ” ,那是 Antlr3 為規(guī)則語言提供的語法分析。這章主要介紹 Drools3自帶的規(guī)則語言。第三章 . 規(guī)則語言 . 概述 Drools 3 自帶一種非 XML 格式的規(guī)則語言。這種格式通過使用標(biāo)點符號,使得標(biāo)點非常的輕量化,并且通過 DSL(域規(guī)則語言)支持自然語言的擴(kuò)展,這使得你可以將該語言演化到與你需要解決的問題域更為相配。其中所用的圖稱為線路圖,是對語言中術(shù)語解釋的基本流圖表。如果你使用規(guī)則工作臺,那許多規(guī)則結(jié)構(gòu)可以通過內(nèi)容輔助系統(tǒng)完成,例如輸入‘ ru’然后按 下 Ctrl+Space,它將為你建立一個規(guī)則結(jié)構(gòu)。在一個 drl 文件中可以包含多個規(guī)則,函數(shù)等等。 DRL 是簡單的 text文件格式。 ATTRIBUTES(通常是可選項)指出規(guī)則的行為表現(xiàn)。 RHS 是允許 Java 語義代碼(很快將支持其它語言和 C)執(zhí)行的塊。任何在 LHS 中綁定的變量可以在 RHS 中使用。 . 領(lǐng)域語言 Domain Specific Languages DSL 是作為對 Drools 3 自帶語言的增強(qiáng)來實現(xiàn)的。這個擴(kuò)展機(jī)制是一個可擴(kuò)展的 API,但是它默認(rèn)與 dsl擴(kuò)展名的文件工作,dsl 文件中包含了如何將域語言或自然語言映射為規(guī)則語言以及域?qū)ο蟆? DSLs 擴(kuò)展機(jī)制通過一行行處理規(guī)則源文件,就好像進(jìn)行編譯一樣,這也是換行機(jī)制唯一起到重要作用的時候。 DSL擴(kuò)展機(jī)制可以為不同的領(lǐng)域進(jìn)行預(yù)定義,并提供其它自然語言的格式進(jìn)行分析。但在某些情況下, Drools 自帶的規(guī)則語言是完美的。 . Reserved words 在規(guī)則語言中使用了一些保留字。接下來的列表是你應(yīng)該在規(guī)則內(nèi)容中避免使用的保留字(如果使用了,大多數(shù)時候可以正常工作,但有時會引起解析錯誤)。 when then rule end contains matches and or modify retract assert salience function query exists eval agendagroup noloop duration not autofocus . Comments 注釋 注釋用來標(biāo)記那些需要被規(guī)則引擎忽略的內(nèi)容。 . 單行注釋 圖 . 單 行注釋 . 多行注釋 圖 . 多行注釋 . Packa
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1