日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Drools 规则语言详解(上)

發(fā)布時(shí)間:2024/4/17 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Drools 规则语言详解(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html

?

http://www.blogjava.net/guangnian0412/archive/2006/06/09/51756.html

Drools 規(guī)則語言詳解(上)

<!--[if !supportLists]--> 1.? <!--[endif]--> 概述:

Drools 3 采用了原生的規(guī)則語言,那是一種非 XML 文本格式。在符號(hào)方面,這種格式是非常輕量的,并且通過“ expanders ”支持符合你問題域的 Domain Specific Language ( DSL )。這一章把焦點(diǎn)放在了 Drools 原生的規(guī)則格式。如果你想從技術(shù)上了解規(guī)則語言的機(jī)制,可以參考“ drl.g ”源文件,這是用 Antlr3 語法來描述規(guī)則語言。如果你使用 Rule Workbench ,內(nèi)容助手將會(huì)為你完成大量的規(guī)則結(jié)構(gòu),例如輸入“ ru ”,然后按 ctrl + space ,會(huì)為你建立規(guī)則結(jié)構(gòu)。

<!--[if !supportLists]--> 1.1??? <!--[endif]--> 規(guī)則文件

一個(gè)規(guī)則文件通常是一個(gè)以 .drl 擴(kuò)展名結(jié)尾的文件。在一個(gè) drl 文件中,你可以有多條 rules , functions 等等。盡管如此,你也可以將你的規(guī)則分布在多個(gè)文件中,這有利于管理大量的規(guī)則。一個(gè) DRL 文件是一個(gè)簡(jiǎn)單的文本文件。

1.2 規(guī)則的結(jié)構(gòu)

一個(gè)規(guī)則結(jié)構(gòu)大致如下:

rule? " name "
????ATTRIBUTES
????when
????????LHS
????then
????????RHS
end

可以看到,這是非常簡(jiǎn)單的。通常的標(biāo)點(diǎn)符號(hào)都是不需要的,甚至連“ name ”的雙引號(hào)都是不需要的。 ATTRIBUTES 是簡(jiǎn)單的,也是可選的,來提示規(guī)則的行為方式。 LHS 是規(guī)則的條件部分,需要按照一定的語法來寫。 RHS 基本上是一個(gè)允許執(zhí)行 Java 語法的代碼的塊(以后將會(huì)支持 groovy 和 C #)。任何在 LHS 中使用的變量都可以在 RHS 中使用。

注意:每行開始的空格是不重要的,除非在 DSL ( Domain Specific Language )語言中有特別的指明。

<!--[if !supportLists]--> 1.3?? <!--[endif]--> Domain Specific Language

Domain Specific Language 是對(duì)原生規(guī)則語言的加強(qiáng)。它們使用“ expander ”機(jī)制。 Expander 機(jī)制是一種可擴(kuò)展的 API 。你可以使用 .dsl 文件,來提供從域或自然語言到規(guī)則語言和你的域?qū)ο蟮挠成洹D憧梢詫?.dsl 文件看成是對(duì)你的域模型的映射。 DSL 提供了更高的規(guī)則可讀性,你可以選擇使用你自己創(chuàng)建的 DSL ,或者是原生的規(guī)則語言。

1.4 保留字

在規(guī)則語言中存在一些保留字。你應(yīng)該避免使用這些保留字,來命名規(guī)則文本中的域?qū)ο?#xff0c;屬性,方法,功能。保留字如下: when , then , rule , end , contains , matches , and , or , modify , retract , assert , salience , function , query , exists , eval , agenda-group , no-loop , duration , -> , not , auto-focus 。

<!--[if !supportLists]--> 2. ? <!--[endif]--> 注釋

2.1 單行注釋:

Figure?2.1.?Single line comment

2.2 多行注釋:


Figure?2.2.?Multi line comment

<!--[if !supportLists]-->

3. ??? <!--[endif]--> Package

一個(gè)包是 rule 和其他相關(guān)結(jié)構(gòu),像 import 和 global 的集合。 Package 的成員之間通常都是相關(guān)聯(lián)的。一個(gè) Package 代表了一個(gè)命名空間( namespace ),用來使給定的規(guī)則組之間保持唯一性。 Package 的名字本身就是命名空間,并且與文件或文件夾并無關(guān)聯(lián)。

<!--[if !supportEmptyParas]-->

可以將來自不同規(guī)則源的規(guī)則裝配在一起,前提是這些規(guī)則必須處在同一個(gè)命名空間中。盡管如此,一個(gè)通常的結(jié)構(gòu)是將處于同一個(gè)命名空間中的所有規(guī)則都放在同一個(gè)相同的文件中。

下面的 rail-road 圖顯示了組成一個(gè) Package 的所有組件。注意:一個(gè) package 必須有一個(gè)命名空間,并且采用 Java 包名的約定。在一個(gè)規(guī)則文件中,各組件出現(xiàn)的位置是任意的,除了“ package ”和“ expander ”語句必須出現(xiàn)在任何一個(gè)規(guī)則之前,放在文件的頂部。在任何情況下,分號(hào)都是可選的。


Figure?3.1.?package
3.1 import

Figure?3.2.?import

Import 語句的使用很像 Java 中的 import 語句。你需要為你要在規(guī)則中使用的對(duì)象,指定完整的路徑和類名。 Drools 自動(dòng)從相同命名的 java 包中引入所需的類。

3.2 expander

Figure?3.3.?expander

expander 語句是可選的,是用來指定 Domain Specific Language 的配置(通常是一個(gè) .dsl 文件)。這使得解析器可以理解用你自己的 DSL 語言所寫的規(guī)則。

3.3 global


Figure?3.4.?global

Global 就是全局變量。如果多個(gè) package 聲明了具有相同標(biāo)識(shí)符的 global ,那么它們必需是相同的類型,并且所有的引用都是相同的。它們通常用來返回?cái)?shù)據(jù),比如 actions 的日志,或者為 rules 提供所需的數(shù)據(jù)或服務(wù)。 global 并不是通過 assert 動(dòng)作放入 WorkingMemory 的,所有當(dāng) global 發(fā)生改變時(shí),引擎將不會(huì)知道。所以, global 不能作為約束條件,除非它們的值是 final 的。將 global 錯(cuò)誤的使用在約束條件中,會(huì)產(chǎn)生令人驚訝的錯(cuò)誤結(jié)果。

<!--[if !supportEmptyParas]-->

注意: global 只是從你的 application 中傳入 WorkingMemory 的對(duì)象的命名實(shí)例。這意味著你可以傳入任何你想要的對(duì)象。你可以傳入一個(gè) service locator ,或者是一個(gè) service 本身。

<!--[if !supportEmptyParas]-->

下面的例子中,有一個(gè) EmailService 的實(shí)例。在你調(diào)用規(guī)則引擎的代碼中,你有一個(gè) EmailService 對(duì)象,然后把它放入 WorkingMemory 。在 DRL 文件中,你聲明了一個(gè)類型為 EmailService 的 global ,然后將它命名為“ email ”,像這樣: global EmailService email ;。然后在你的規(guī)則的 RHS 中,你可以使用它,像這樣: email.sendSMS(number,message) 等等。

4. Function


Figure?4.1.?function

Function 是將代碼放到你的規(guī)則源中的一種方法。它們只能做類似 Helper 類做的事(實(shí)際上編譯器在背后幫你生成了 Helper 類)。在一個(gè) rule 中使用 function 的主要優(yōu)勢(shì)是,你可以保持所有的邏輯都在一個(gè)地方,并且你可以根據(jù)需要來改變 function (這可能是好事也可能是壞事)。 Function 最有用的就是在規(guī)則的 RHS 調(diào)用 actions ,特別是當(dāng)那個(gè) action 需要反復(fù)調(diào)用的時(shí)候。

<!--[if !supportEmptyParas]-->

一個(gè)典型的 function 聲明如下:

function?String?calcSomething(String?arg)?{
return ? " hola?! " ;
}

<!--[if !supportEmptyParas]-->

注意:“ function ”關(guān)鍵字的使用,它并不真正是 Java 的一部分。而 function 的參數(shù)就像是一個(gè)普通的 method (如果不需要參數(shù)就不用寫)。返回類型也跟普通的 method 一樣。在一條規(guī)則(在它的 RHS 中,或可能是一個(gè) eval )中調(diào)用 function ,就像調(diào)用一個(gè) method 一樣,只需要 function 的名字,并傳給它參數(shù)。

<!--[if !supportEmptyParas]-->

function 的替代品,可以使用一個(gè) Helper 類中的靜態(tài)方法: Foo.doSomething() ,或者以 global 的方式傳入一個(gè) Helper 類或服務(wù)的實(shí)例: foo.doSomething() ( foo 是一個(gè)命名的 global 變量)。

<!--[if !supportEmptyParas]-->

?

Drools規(guī)則語言詳解(下)

5. Rule

Figure?5.1.?rule

Rule 結(jié)構(gòu)是最重要的結(jié)構(gòu)。 Rule 使用了形如“ IF ” something “ THEN ” action (當(dāng)然,我們的關(guān)鍵字是“ when ”和“ then ”)的形式。

一個(gè)規(guī)則在一個(gè) package 中必須要有唯一的名字。如果一個(gè)名字中含有空格,那就需要將名字放在雙引號(hào)中(最好總是使用雙引號(hào))。

Attribute 是可選的(最好是每行只有一個(gè) Attribute )。

規(guī)則的 LHS 跟在“ when ”關(guān)鍵字的后面(最好是另起一行),同樣 RHS 要跟在“ then ”關(guān)鍵字后面(最好也另起一行)。規(guī)則以關(guān)鍵字“ end ”結(jié)束。規(guī)則不能嵌套。

5.1 Left Hand Side

Left Hand Side 其實(shí)就是規(guī)則的條件部分。 LHS 對(duì)應(yīng)的 rail-road 圖如下,我們?cè)诤竺鏁?huì)做進(jìn)一步解釋:


Figure?5.2.?Left Hand Side


Figure?5.3.?pattern

5.2 Right Hand Side

Right Hand Side ( RHS )就是規(guī)則的結(jié)果( consequence )或者動(dòng)作( action )部分。 RHS 的目的是 retract 或 add facts 到 WorkingMemory 中,還有針對(duì)你的 application 的動(dòng)作。實(shí)際上, RHS 是當(dāng)規(guī)則激發(fā)( fire )時(shí)執(zhí)行的代碼塊。

在 RHS 中,你可以使用幾個(gè)方便的 method 來改變 WorkingMemory :

“ modify(obj) ”:告訴引擎一個(gè)對(duì)象已經(jīng)發(fā)生變化,規(guī)則必須重新匹配( obj 對(duì)象必須是出現(xiàn)在 LHS 中的對(duì)象);

“ assert(new Something()) ”:將一個(gè)新的 Something 對(duì)象加入 WorkingMemory ;

“ assertLogical(new Something()) ”:與 assert 方法類似。但是,當(dāng)沒有 fact 支持當(dāng)前激發(fā)規(guī)則的真實(shí)性的時(shí)候,這個(gè)新對(duì)象會(huì)自動(dòng)被 retract ,

“ retract(obj) ”:從 WorkingMemory 中移除一個(gè)對(duì)象。

這些方法都是宏指令,提供了到 KnowledgeHelper 實(shí)例的快捷方式(參考 KnowledgeHelper 接口)。 KnowledgeHelper 接口可以在 RHS 代碼塊中調(diào)用,通過變量“ drools ”。如果你在 assert 進(jìn)引擎的 JavaBean 中加入“ Property Change Listener ”,在對(duì)象發(fā)生變化的時(shí)候,你就不用調(diào)用“ modify ”方法。

5.3 Rule Attributes


Figure?5.4.?rule attributes

5.3.1 no-loop

默認(rèn)值: false

類型: boolean

當(dāng)在 rule 的 RHS 中修改了一個(gè) fact ,這可能引起這個(gè) rule 再次被 activate ,引起遞歸。將 no-loop 設(shè)為 true ,就可以防止這個(gè) rule 的 Activation 的再次被創(chuàng)建。

5.3.2 salience

默認(rèn)值: 0

類型: int

每個(gè) rule 都可以設(shè)置一個(gè) salience 整數(shù)值,默認(rèn)為 0 ,可以設(shè)為正整數(shù)或負(fù)整數(shù)。 Salience 是優(yōu)先級(jí)的一種形式。當(dāng)處于 Activation 隊(duì)列中時(shí),擁有高 salience 值的 rule 將具有更高的優(yōu)先級(jí)。

5.3.3 agenda-group

默認(rèn)值: MAIN

類型: String

Agenda group 允許用戶對(duì) Agenda 進(jìn)行分組,以提供更多的執(zhí)行控制。只有具有焦點(diǎn)的組中的 Activation 才會(huì)被激發(fā)( fire )。

5.3.4 auto-focus

默認(rèn)值: false

類型: boolean

當(dāng)一個(gè)規(guī)則被 activate (即 Activation 被創(chuàng)建了),如果這個(gè) rule 的 auto-focus 值為 true 并且這個(gè) rule 的 agenda-group 沒有焦點(diǎn),此時(shí)這個(gè) Activation 會(huì)被給予焦點(diǎn),允許這個(gè) Activation 有 fire 的潛在可能。

5.3.5 activation-group

默認(rèn)值: N/A

類型: String

當(dāng)處于同一個(gè) activation-group 中的第一個(gè) Activation fire 后,這個(gè) activation-group 中其余剩下的 Activation 都不會(huì)被 fire 。

5.3.6 duration

默認(rèn)值:沒有默認(rèn)值

類型: long

5.4 Column


Figure?5.5.?Column

Example?5.1.?Column

Cheese(?)
Cheese(?type? == ? " stilton " ,?price? < ? 10 ?)

一個(gè) Column 由一個(gè)類的一個(gè)或多個(gè)域約束構(gòu)成。第一個(gè)例子沒有約束,它將匹配 WorkingMemory 中所有的 Cheese 實(shí)例。第二個(gè)例子對(duì)于一個(gè) Cheese 對(duì)象有兩個(gè)字面約束( Literal Constraints ),它們被用“,”號(hào)隔開,意味著“ and ”。


Figure?5.6.?Bound Column

Example?5.2.?Bound Column

cheapStilton?:?Cheese(?type? == ? " stilton " ,?price? < ? 10 ?) <!--[if !supportEmptyParas]--> <!--[endif]-->

這個(gè)例子同前一個(gè)例子有點(diǎn)類似。但是在這個(gè)例子中,我們將一個(gè)變量綁定到匹配規(guī)則引擎的 Cheese 實(shí)例上。這意味著,你可以在另一個(gè)條件中使用 cheapStilton ,或者在 rule 的 RHS 中。

5.4.1 Field Constraints

Field Constraints 使規(guī)則引擎可以從 WorkingMemory 中挑選出合適的 Fact 對(duì)象。一個(gè) Fact 的“ Field ”必須符合 JavaBean 規(guī)范,提供了訪問 field 的 getter 方法。你可以使用 field 的名字直接訪問 field ,或者使用完整的方法名(省略括號(hào))。

例如,以我們的 Chess 類為例,下面是等價(jià)的: Cheese(type = = …) 和 Cheese(getType = = …) 。這意味著,你可以使用不太嚴(yán)格遵守 JavaBean 規(guī)范對(duì)象。盡管如此,你要保證 accessor 方法是不帶參數(shù)的,以保證它不會(huì)改變對(duì)象的狀態(tài)。

注意:如果一個(gè) field 使用原始類型( primitive type ), Drools 將會(huì)把它們自動(dòng)裝箱成相應(yīng)的對(duì)象(即使你使用 java 1.4 ),但是在 java 1.4 下卻不能自動(dòng)拆箱。總的來說,盡量在 rule 所使用的類中,使用非原始類型的域。如果是使用 java 5 ,就可以比較隨意了,因?yàn)榫幾g器會(huì)幫你執(zhí)行自動(dòng)裝拆箱。

5.4.1.1 Operators


Figure?5.7.?Operators

有效的操作符是同域類型相關(guān)的。例如,對(duì)于日期域,“ < ”意味著“之前”。“ matches ”只適用于 String 域,“ contains ”和“ excludes ”只適用于 Collection 類型域。

5.4.1.2 字面值約束( Literal Constraints )

最簡(jiǎn)單的域約束就是字面值約束,允許用戶將一個(gè) field 約束于一個(gè)已知值。

注意:你可以檢查域是否為 null ,使用 = = 或 != 操作符和字面值‘ null ’關(guān)鍵字。如, Cheese(type != null) 。字面值約束,特別是“ = = ”操作符,提供了非常快的執(zhí)行速度,因?yàn)榭梢允褂蒙⒘蟹▉硖岣咝阅堋?


Figure?5.8.?Literal Constraints

Numeric

所有標(biāo)準(zhǔn)的 Java 數(shù)字基本類型都可以用。

有效操作符:

<!--[if !supportLists]--> ·???????? <!--[endif]--> ==

<!--[if !supportLists]--> ·???????? <!--[endif]--> !=

<!--[if !supportLists]--> ·???????? <!--[endif]--> >

<!--[if !supportLists]--> ·???????? <!--[endif]--> <

<!--[if !supportLists]--> ·???????? <!--[endif]--> >=

<!--[if !supportLists]--> ·???????? <!--[endif]--> <=

Example?5.3 .?Numeric Literal Constraint
Cheese(?quantity? == ? 5 ?)
Date

當(dāng)前只對(duì)“ dd-mm-yyyy ”的日期格式提供默認(rèn)支持。你可以通過指定 drools.dateformat 系統(tǒng)屬性,來改變默認(rèn)的日期格式。如果需要更多的控制,要用謂詞約束( Predicate Constraint )。

有效操作符:

<!--[if !supportLists]--> ·???????? <!--[endif]--> ==

<!--[if !supportLists]--> ·???????? <!--[endif]--> !=

<!--[if !supportLists]--> ·???????? <!--[endif]--> >

<!--[if !supportLists]--> ·???????? <!--[endif]--> <

<!--[if !supportLists]--> ·???????? <!--[endif]--> >=

<!--[if !supportLists]--> ·???????? <!--[endif]--> <=

Example?5.4.?Date Literal Constraint
Cheese(?bestBefore? < ? " 27-Oct-2007 " ?)
String

可以使用任何有效的 Java String 。

有效操作符:

<!--[if !supportLists]--> ·???????? <!--[endif]--> ==

<!--[if !supportLists]--> ·???????? <!--[endif]--> !=

Example?5.5.?String Literal Constraint
Cheese(?type? == ? " stilton " ?)
Boolean

只能用 “ true ”或“ false ”。 0 和 1 不能被識(shí)別,而且 Cheese(smelly) 也是不被允許的。

有效操作符:

<!--[if !supportLists]--> ·???????? <!--[endif]--> ==

<!--[if !supportLists]--> ·???????? <!--[endif]--> !=

Example?5.6?Boolean Literal Constraint
Cheese(?smelly? = ? = ? true ?)
Matches Operator

Matches 操作符后面可以跟任何有效的 Java 正則表達(dá)式。

Example?5.7.?Regular Expression Constraint
Cheese(?type?matches? " (Buffulo)?\\S*Mozerella " ?)
Contains Operator and Excludes Operator

“ contains ”和“ excludes ”可以用來檢查一個(gè) Collection 域是否含有一個(gè)對(duì)象。

Example?5.8.?Literal Cosntraints with Collections CheeseCounter(?cheeses?contains? " stilton " ?)
CheeseCounter(?cheeses?excludes? " chedder " ?)

5.4.1.3 Bound Variable Constraint

可以將 Facts 和它們的 Fields 附給一個(gè) Bound Variable ,然后在后續(xù)的 Field Constraints 中使用這些 Bound Variable 。一個(gè) Bound Variable 被稱為聲明( Declaration )。 Declaration 并不能和“ matches ”操作符合用,但卻可以和“ contains ”操作符合用。

Example?5.9.?Bound Field using '==' operator
Person(?likes?:?favouriteCheese?)
Cheese(?type? == ?likes?)

在上面的例子中,“ likes ”就是我們的 Bound Variable ,即 Declaration 。它被綁定到了任何正在匹配的 Person 實(shí)例的 favouriteCheese 域上,并且用來在下一個(gè) Column 中約束 Cheese 的 type 域。可以使用所有有效的 Java 變量名,包括字符“ $ ”。“ $ ”經(jīng)常可以幫助你區(qū)分 Declaration 和 field 。下面的例子將一個(gè) Declaration 綁定到匹配的實(shí)例上,并且使用了“ contains ”操作符。注意: Declaratino 的第一個(gè)字符用了“ $ ”:

Example?5.10?Bound Fact using 'contains' operator

$stilton?:?Cheese(?type? == ? " stilton " ?)
Cheesery(?cheeses?contains?$stilton?)

5.4.1.4 Predicate Constraints



Figure?5.9.?Predicate expression

Predicate 表達(dá)式可以使用任何有效的 Java 邏輯表達(dá)式。先前的 Bound Declaration 可以用在表達(dá)式中。

下面的例子將會(huì)找出所有男性比女性大 2 歲的 pairs of male/femal people :

Example?5.11. Predicate Constraints Person(?girlAge?:?age,?sex? = ? = ? " F " ?)
Person(?boyAge?:?age? -> ?(?girlAge.intValue()? + ? 2 ? == ?boyAge.intValue()?),?sex? = ? = ? " M " ?)

5.4.1.5 Return Value Constraints



Figure?5.10.?Return Value expression

一個(gè) Retrurn Value 表達(dá)式可以使用任何有效的 Java 表達(dá)式,只要它返回一個(gè)對(duì)象,不能返回原始數(shù)據(jù)類型。如果返回值是原始數(shù)據(jù)類型,要先進(jìn)行裝箱。先前的 Bound Declaration 也可以使用在表達(dá)式中。

下面的例子跟上一節(jié)的例子一樣,也將會(huì)找出所有男性比女性大 2 歲的 pairs of male/femal people 。注意:這里我們不用綁定 boyAge ,增加了可讀性:

Example?5.12.?Return Value Constraints
Person(?girlAge?:?age,?sex? = ? = ? " F " ?)
Person(?age? = ? = ?(? new ?Integer(girlAge.intValue()? + ? 2 )?),?sex? = ? = ? " M " ?)

5.5 Conditional Elements

Conditional Elements 用來連接一個(gè)或多個(gè) Columns 。

5.5.1 “ and ”

Figure?5.11.?and

Example?5.13. ?And

Cheese(?cheeseType?:?type?)? && ?Person(?favouriteCheese? == ?cheeseType?)
Cheese(?cheeseType?:?type?)?and?Person(?favouriteCheese? == ?cheeseType?)

5.5.2 “ or ”


Figure?5.12.?or
Example?5.14.?or
Person(?sex? == ? " f " ,?age? > ? 60 ?)? || ?Person(?sex? == ? " m " ,?age? > ? 65 ?)
Person(?sex? == ? " f " ,?age? > ? 60 ?)?or?Person(?sex? == ? " m " ,?age? > ? 65 ?)



Figure?5.13.?or with binding

Example?5.15.?or with binding

pensioner?:?Person(?sex? == ? " f " ,?age? > ? 60 ?)? || ?pensioner?:?Person(?sex? == ? " m " ,?age? > ? 65 ?)?
pensioner?:?(?Person(?sex? == ? " f " ,?age? > ? 60 ?)?or?Person(?sex? == ? " m " ,?age? > ? 65 ?)?)

“ or ” Conditional Element 的使用會(huì)導(dǎo)致多條 rule 的產(chǎn)生,稱為 sub rules 。上面的例子將在內(nèi)部產(chǎn)生兩條規(guī)則。這兩條規(guī)則會(huì)在 WorkingMemory 中各自獨(dú)立的工作,也就是它們都能進(jìn)行 match , activate 和 fire 。當(dāng)對(duì)一個(gè)“ or ” Conditional Element 使用變量綁定時(shí),要特別小心,錯(cuò)誤的使用將產(chǎn)生完全不可預(yù)期的結(jié)果。

可以將“ OR ” Conditional Element 理解成產(chǎn)生兩條規(guī)則的快捷方式。因此可以很容易理解,當(dāng)“ OR ” Conditional Element 兩邊都為真時(shí),這樣的一條規(guī)則將可能產(chǎn)生多個(gè) activation 。

5.5.3 “ eval ”


Figure?5.14 .?eval

Eval is essentially a catch all which allows any semantic code (that returns a primitive boolean) to be executed. 在表達(dá)式中可以引用在 LHS 中出現(xiàn)的變量,和在 rule package 中的 Functions 。一個(gè) Eval 應(yīng)該是 LHS 中的最后一個(gè) Conditional Element 。在一個(gè) rule 中,你可以有多個(gè) eval 。

Eval 不能被索引,因此不能像 Field Constraints 那樣被優(yōu)化。盡管如此,當(dāng) Functions 的返回值一直在變化時(shí),應(yīng)該使用 Eval ,因?yàn)檫@在 Field Constraints 中時(shí)不允許的。如果規(guī)則中的其他條件都匹配,一個(gè) eval 每次都要被檢查。(現(xiàn)在還不理解到底 eval 要怎么用?)

Example?5.16.?eval

p1?:?Parameter()?
p2?:?Parameter()
eval(?p1.getList().containsKey(p2.getItem())?)
eval(?isValid(p1,?p2)?)? // this?is?how?you?call?a?function?in?the?LHS?-?a?function?called? // "isValid"

5.5.4 “ not ”


Figure?5.15.?not

“ not ”是一階邏輯的存在量詞( first order logic’s Existential Quantifier ) , 用來檢查 WorkingMemory 中某對(duì)象的非存在性。現(xiàn)在,只有 Columns 可以放在 not 中,但是將來的版本會(huì)支持“ and ”和“ or ”。

Example?5.17.?No Buses

not?Bus()

Example?5.18.?No red Buses

not?Bus(color? == ? " red " )
not?(?Bus(color? == ? " red " ,?number? = ? = ? 42 )?)? // brackets?are?optional

5.5.5 “ exists ”


Figure?5.16.?exists

“ exists ” 是一階邏輯的存在量詞( first order logic’s Existential Quantifier ),用來檢查 WorkingMemory 中某對(duì)象的存在性。可以將“ exists ”理解為“至少有一個(gè)”( at least one… )。它的意義不同于只有 Column 本身,“ Column ”本身可以理解為“對(duì)于每一個(gè) … ”( for each of … )。如果你對(duì)一個(gè) Column 使用了“ exists ”,那么規(guī)則將只 activate 一次,而不管 WorkingMeomry 中有多少個(gè)數(shù)據(jù)匹配了那個(gè)條件。

現(xiàn)在,只有 Columns 可以放在“ exists ”中,但是將來的版本會(huì)支持“ and ”和“ or ”。

Example?5.19.?At least one Bus

exists?Bus()

Example?5.20.?At least one red Bus

exists?Bus(color? == ? " red " )

5.5.6 “ group ”


Figure?5.17.?group

Group 的作用相當(dāng)于代數(shù)學(xué)中的“()”,顯式的指明操作的順序。

5.6 再談自動(dòng)裝箱和原始類型

Java 5 支持在原始類型與其對(duì)應(yīng)包裝類之間的裝拆箱。盡管如此,因?yàn)橐?drools 能夠在 J2SE 1.4 下運(yùn)行,我們不能依靠 J2SE 。因此, drools 自己實(shí)現(xiàn)了自動(dòng)裝箱。被引用(即被 Bound Variable 綁定)的 Field 將被自動(dòng)進(jìn)行裝箱(如果它們本身就是 object ,就不會(huì)有任何變化)。盡管如此,必須要注意的是,他們并不會(huì)被自動(dòng)拆箱。

還有一點(diǎn)要注意的,就是對(duì)于 ReturnValue Constraints ,返回值的代碼必須返回一個(gè)對(duì)象,而不能是一個(gè)原始類型。

6 . Query


Figure?6.1 .?query

一個(gè) query 只包含了一個(gè) rule 的 LHS 結(jié)構(gòu)(你不用指定“ when ”或“ then ”)。這是查詢 WorkingMemory 中匹配條件的 Facts 的簡(jiǎn)單的方法。

要得到結(jié)果,要使用 WorkingMemory.getQueryResults(“name”) 方法,其中“ name ”就是 query 的名字。 Query 的名字在 RuleBase 中是全局的,所以, do not add queries of the same name to different packages for the same RuleBase 。

下面的例子創(chuàng)建了一個(gè)簡(jiǎn)單的 query 來查詢所有年齡大于 30 的人:

Example?6.1.?Query People over the age of 30
?
query?"people?over?the?age?of?30"?
????person?:?Person(?age?>?30?)
end

我們通過一個(gè)標(biāo)準(zhǔn)的循環(huán)來迭代一個(gè)返回的QueryResults對(duì)象。每一次的iterate將返回一個(gè)QueryResult對(duì)象。我們可以用QueryResult對(duì)象的get()方法來訪問每個(gè)Column,通過傳入Bound Declaration或index position。

Example?6.2.?Query People over the age of 30

QueryResults?results?=?workingMemory.getQueryResults(?"people?over?the?age?of?30"?);
System.out.println(?"we?have?"?+?results.size()?+?"?people?over?the?age??of?30"?);

System.out.println(?"These?people?are?are?over?30:"?);

for?(?Iterator?it?=?results.iterator;?it.hasNext();?)?{
????QueryResult?result?=?(?QueryResult?)?it.next();
????Person?person?=?(?Person?)?result.get(?"person"?);
????System.out.println(?person.getName()?+?"\n"?);
}

總結(jié)

以上是生活随笔為你收集整理的Drools 规则语言详解(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

日韩美女久久 | 国产中文字幕第一页 | 久久久av免费 | 久日精品| av3级在线| 亚洲激情影院 | 欧美成人h版电影 | 91福利社在线观看 | 色综合久久88色综合天天6 | 成人国产精品电影 | 免费看黄20分钟 | 成人app在线免费观看 | 国产一区不卡在线 | 少妇bbbb搡bbbb搡bbbb | av日韩国产 | 成人久久毛片 | 丝袜美腿在线视频 | 色婷婷狠狠18| 久久伊人五月天 | 欧美性色19p | 韩国av免费观看 | 久久国产经典 | 国产自产高清不卡 | 国产精品wwwwww | 日韩在线视频线视频免费网站 | 国产午夜精品一区二区三区欧美 | 欧美天天综合网 | 韩国av免费观看 | 色黄久久久久久 | 欧美成人按摩 | 成人免费在线网 | 麻豆视频免费在线 | 97国产精品久久 | 日本黄色大片免费 | 丝袜网站在线观看 | 蜜臀av网站| 国产精品免费观看久久 | 婷婷激情小说网 | 中文字幕在线观看一区 | av黄色成人| 奇人奇案qvod | 岛国av在线不卡 | 99久久精品费精品 | 在线亚洲天堂网 | 国产精品毛片久久蜜 | 中文字幕韩在线第一页 | 97精品国自产拍在线观看 | 欧美精品久久久久久久久久久 | 免费高清国产 | www黄在线 | 日韩精品国产一区 | www在线观看视频 | 久久久免费网站 | 色综合咪咪久久网 | 美女网站视频免费黄 | 欧美一级淫片videoshd | 国产九色视频在线观看 | 91精品免费在线 | 69绿帽绿奴3pvideos | 日韩a在线播放 | 国产福利一区在线观看 | 日韩毛片精品 | 国产不卡一 | 伊人狠狠操 | 激情五月婷婷综合 | 成人激情开心网 | 99久久er热在这里只有精品15 | 四虎影视精品 | 国产视频 亚洲视频 | 激情丁香在线 | 久久久久久影视 | 亚洲精品国 | 日韩69av| 亚洲电影成人 | 99精品在线观看视频 | 日韩av在线影视 | 天天操 夜夜操 | 最新色站| 免费a现在观看 | aav在线 | 精品久久久久久亚洲 | 一区二区三区精品在线视频 | 91成人精品观看 | 国产精品久久久久久爽爽爽 | 亚洲成人影音 | 国产精品门事件 | 日韩另类在线 | 成人免费在线网 | 久久精品亚洲 | 日韩精品久久久 | 亚洲区视频在线观看 | 久久兔费看a级 | 日韩欧美国产激情在线播放 | 激情丁香5月 | 色99中文字幕 | 久久国产麻豆 | 精品日韩在线 | 91久久精品一区二区二区 | 欧美色一色 | 激情视频在线观看网址 | www.五月天 | 日本久久久亚洲精品 | 亚洲日本va午夜在线电影 | 亚洲日本色 | av不卡免费在线观看 | 国产精品18久久久久久vr | 欧美韩日在线 | 99久久精品国产一区二区三区 | 99久高清在线观看视频99精品热在线观看视频 | 精品福利视频在线 | 97国产小视频 | 99免费精品 | 久久精品国产一区二区三 | 五月激情五月激情 | 在线观看mv的中文字幕网站 | 亚洲成人黄色在线观看 | 色婷婷88av视频一二三区 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 在线观看免费成人 | 久久国产精品二国产精品中国洋人 | 2024国产精品视频 | 欧美成人性战久久 | 免费成人看片 | 黄色三几片| 久久看毛片 | 96久久欧美麻豆网站 | 日本中文在线播放 | 国产精品igao视频网入口 | 在线观看色视频 | 日韩首页| 免费精品在线观看 | 91正在播放| 最新免费中文字幕 | 美女网站视频免费都是黄 | 欧美精品久久久久 | 国产在线视频不卡 | 久久情爱 | 91亚洲精品国产 | 亚洲成人精品久久久 | 亚洲欧洲成人精品av97 | 亚洲精品一区二区久 | 91精品久久久久久综合乱菊 | 国产99亚洲 | 国产精品成人品 | av免费成人| 人人草人人草 | 香蕉影院在线播放 | 欧美a级免费视频 | 日韩 在线观看 | 国产亚洲午夜高清国产拍精品 | 青春草免费视频 | 天天操天天色天天射 | 国产不卡av在线播放 | 在线视频a| 欧美日韩国产高清视频 | 9在线观看免费高清完整 | 亚洲色图色 | 亚洲一区二区麻豆 | 在线观看一级 | 国产 日韩 在线 亚洲 字幕 中文 | 三级免费黄色 | 国产九九九精品视频 | 美女网站在线观看 | 中文字幕国产 | 日本黄区免费视频观看 | 狠狠婷婷| 国产破处在线播放 | 国产精品国产亚洲精品看不卡 | 亚州中文av | 射射色 | 免费涩涩网站 | 91精品啪| 91丨九色丨蝌蚪丨对白 | 狠狠干 狠狠操 | 亚洲国产精品久久 | 国模吧一区| 中文字幕中文字幕在线中文字幕三区 | av高清一区二区三区 | 国产视频69 | 99精品免费 | 欧美日韩精品在线观看视频 | 中文字幕传媒 | 国产精品99久久免费观看 | 日本韩国欧美在线观看 | av网站地址 | 黄色在线观看网站 | 天天久久综合 | 黄色小说视频在线 | 日本性生活一级片 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲视屏 | 国产真实精品久久二三区 | 一本一道久久a久久精品 | 国产白浆在线观看 | 91在线日韩 | 欧美日韩国产精品一区二区三区 | 美腿丝袜av | 91在线最新 | 亚洲免费国产视频 | 91在线视频免费观看 | 久久成人国产精品一区二区 | 香蕉97视频观看在线观看 | 久久久久久久久久久影院 | 欧亚日韩精品一区二区在线 | 天天草天天草 | 欧美性粗大hdvideo | 日本二区三区在线 | 毛片.com| 91久久偷偷做嫩草影院 | 在线婷婷 | 在线精品国产 | 久久免费久久 | 超碰官网 | 91精品国自产在线观看 | 中文字幕第一页在线 | 欧美色道 | 欧美精品在线观看一区 | 国产视频一区二区在线观看 | 国产精选在线观看 | 91禁在线观看 | 成人免费在线看片 | 亚洲精品中文在线 | 永久免费精品视频 | 91视频一8mav | 久草在线手机观看 | 中文字幕国内精品 | 亚洲欧洲精品一区二区精品久久久 | 国产亚洲精品电影 | 五月婷婷视频在线 | 久久久久久久久爱 | 国产日韩精品一区二区三区在线 | 日韩激情视频在线 | 男女视频久久久 | 国产精选在线观看 | 国产视频在 | 极品国产91在线网站 | 日韩一区二区三区免费电影 | 国产美女网站视频 | 欧美黄色特级片 | 欧美日韩高清免费 | 三级午夜片 | 黄色中文字幕在线 | 91av短视频 | 日韩 在线a | 久久毛片高清国产 | 99国产精品久久久久久久久久 | 精品乱码一区二区三四区 | 91中文字幕永久在线 | 91精品久久久久久 | 亚洲伦理中文字幕 | 91精品国产99久久久久久红楼 | 久久ww| 草久久久| 国产成人精品一区二区三区免费 | 探花视频在线观看+在线播放 | 久久久国产精品一区二区中文 | 亚洲精品乱码白浆高清久久久久久 | 麻豆观看 | 久久久在线视频 | 欧美精品久久久久久久久免 | 久久精品国产亚洲aⅴ | 96香蕉视频| 在线国产视频一区 | 亚洲综合小说 | 国产精品理论片在线观看 | 国产成人av在线 | 亚洲电影成人 | 婷婷伊人综合 | 久草免费在线视频观看 | 久久在线视频精品 | 99久久国产免费看 | 免费网站在线观看成人 | 天天干中文字幕 | 国产99久久久国产精品免费二区 | 色七七亚洲影院 | 亚洲午夜在线视频 | 亚洲欧美乱综合图片区小说区 | 久久不射影院 | 国产性天天综合网 | 夜夜婷婷 | 日本精品在线 | 亚洲精品乱码白浆高清久久久久久 | 免费精品人在线二线三线 | 午夜久久久久久久久久影院 | 日韩av中文 | 色小说av | 国产视频不卡 | 亚洲高清久久久 | 中文字幕中文字幕在线一区 | 四虎在线永久免费观看 | 日产中文字幕 | 久久综合福利 | 欧美日本啪啪无遮挡网站 | 在线观看91久久久久久 | 国产色秀视频 | 国产精品美女久久久久aⅴ 干干夜夜 | 久久专区 | 亚洲高清视频在线 | 久久国产精品99久久久久久老狼 | 国产精品wwwwww | 黄色成人毛片 | 天天插天天射 | 久久精品三级 | 色播亚洲婷婷 | 国产精品久久久久久欧美 | 有码中文字幕在线观看 | www.狠狠插.com | 色99久久 | 伊人五月 | 久久y| 五月天久久久 | 丁香六月婷婷激情 | 欧美a级在线免费观看 | 欧美日本啪啪无遮挡网站 | 91在线91拍拍在线91 | 精品视频123区在线观看 | 亚洲视频一级 | 国精产品999国精产品岳 | 91在线免费看片 | 黄色一级性片 | 久久夜色电影 | 久久99日韩 | 国产精品久久久久9999吃药 | 亚洲在线精品视频 | 99久久精品免费一区 | 狠狠综合网 | 日韩高清免费电影 | 亚洲欧美日韩国产一区二区 | 天天干天天怕 | 亚洲精品视频免费在线观看 | 亚洲成av人片在线观看 | 操操操日日日 | 久久亚洲电影 | 国产成人三级三级三级97 | 亚洲电影网站 | 欧美久久久久久久久中文字幕 | 国产精品成人免费精品自在线观看 | 成人黄色大片在线观看 | 五月天久久婷 | 亚洲老妇xxxxxx | 超碰在97| 91麻豆网 | 69精品 | 91亚洲精| 在线观看黄污 | 亚洲成人av片在线观看 | 日韩毛片在线免费观看 | 五月婷婷亚洲 | 国产一级片毛片 | 免费观看www视频 | 国内综合精品午夜久久资源 | 久久国产美女视频 | 日韩国产欧美在线视频 | 亚洲精品国产免费 | 俺要去色综合狠狠 | 欧美精品久 | 91亚洲精品久久久蜜桃借种 | 97超碰网 | 中文字幕一区二区三区在线视频 | 久久久久久久久久久久av | 国产精品观看在线亚洲人成网 | 欧美日韩国产精品久久 | 亚洲 欧美 国产 va在线影院 | 在线小视频国产 | 日韩有码在线观看视频 | 69视频在线 | 欧美日韩在线观看一区二区三区 | 五月婷婷色 | 日韩欧美久久 | 五月婷婷丁香激情 | 中文字幕专区高清在线观看 | 日韩国产精品一区 | 国内精品久久久久 | 中文一区二区三区在线观看 | 超碰999| 91香蕉国产 | 国产色一区 | 欧美日韩国产欧美 | 亚洲一级国产 | 精品99在线视频 | 综合久久久 | 欧美福利久久 | 在线欧美最极品的av | 色综合久久精品 | 国产综合91| 五月天综合网站 | 国产精品自产拍在线观看桃花 | 四虎国产精品免费观看视频优播 | 色噜噜日韩精品一区二区三区视频 | 亚洲综合欧美日韩狠狠色 | 九九在线视频免费观看 | 97电影网手机版 | 久草视频在线资源 | 午夜精品久久久久久久久久久久 | 国产精品久久久久久久久久ktv | 高清av中文在线字幕观看1 | 色综合中文综合网 | 久久香蕉国产 | 国产午夜免费视频 | 久久精品免费播放 | 在线直播av | 久久人人爽人人爽人人 | 免费观看黄 | 一区三区视频在线观看 | 日日操日日操 | 97精品视频在线 | 婷婷亚洲最大 | 国产在线播放不卡 | 1024手机在线看 | 久久久久五月天 | 99精品久久99久久久久 | 樱空桃av | 欧美日韩性视频 | 国产91精品久久久久久 | 国产精品亚洲综合久久 | 日韩videos | 涩涩爱夜夜爱 | 正在播放亚洲精品 | 国产色婷婷精品综合在线手机播放 | 三级黄色欧美 | 五月天久久精品 | 521色香蕉网站在线观看 | 91精品国产91久久久久福利 | 91爱爱网址| 日韩成人欧美 | 亚洲国产精品久久久久婷婷884 | 99在线播放 | 日韩理论视频 | 精品久久久久久国产91 | 欧美aaa一级| 99久久婷婷国产综合精品 | 中文字幕日本电影 | 亚洲第一成网站 | 久久综合色8888| 黄色在线观看免费网站 | 国产精品午夜免费福利视频 | 久久天天躁狠狠躁亚洲综合公司 | 国产精品资源在线 | 日本久久成人 | 日韩欧美电影网 | 久久99久久99精品免视看婷婷 | 国产精品中文字幕在线观看 | 久久综合婷婷 | 久久av黄色 | 中国一级片视频 | 欧美久久九九 | 国产玖玖视频 | av黄色成人 | 国产高清不卡av | 欧美日一级片 | 片黄色毛片黄色毛片 | 97综合在线 | 久久99视频免费观看 | 国产97在线视频 | 激情视频在线观看网址 | 欧美福利精品 | 久热只有精品 | 成人毛片一区 | 亚洲成人午夜在线 | 国产成人综合在线观看 | 婷婷久久婷婷 | 涩涩网站在线观看 | 日本深夜福利视频 | 欧美日韩一级久久久久久免费看 | 99这里只有精品99 | 国产亚洲欧洲 | 欧美视屏一区二区 | 国产精品综合在线观看 | 久久亚洲国产精品 | 色婷婷狠狠五月综合天色拍 | 在线观看中文字幕网站 | 九九视频免费在线观看 | 日韩欧美一区二区在线播放 | 亚洲在线视频播放 | 久久影院中文字幕 | 在线观看亚洲精品视频 | 亚洲高清视频一区二区三区 | 最近中文字幕 | 日韩欧美在线一区二区 | 午夜久久福利视频 | 国产四虎影院 | 亚洲不卡av一区二区三区 | 人人看人人草 | 久久国际影院 | 亚洲精品国产精品国自产观看浪潮 | 天天干天天干天天干天天干天天干天天干 | 久草在线这里只有精品 | 日韩免费播放 | 欧美日韩一区二区视频在线观看 | 午夜精品一区二区三区在线观看 | 国产亚洲精品成人av久久ww | 中文字幕在线免费看 | 成人午夜免费剧场 | 国产麻豆电影在线观看 | 亚洲欧美婷婷六月色综合 | 国产精品美女在线观看 | 天天综合导航 | av3级在线| 欧美日本三级 | 在线国产日韩 | 成人久久免费 | 亚洲日本色 | 中文字幕 影院 | av综合网址 | 国产在线视频资源 | 精品久久久久久亚洲 | 欧美色黄| 在线观看一区二区精品 | 婷婷在线视频 | 国产精品久久久久久模特 | 午夜久久久影院 | 在线观看黄污 | 在线观看aa | 欧美一二三区在线观看 | www天天干 | 九九九热 | 在线激情网| 91成人看片 | 成人黄色在线播放 | 丁香激情五月婷婷 | 丁香六月色 | 免费a级毛片在线看 | 日本精品一二区 | 久久精品一二三区 | 日韩中文字幕在线观看 | 在线亚洲欧美视频 | 日韩一区二区免费在线观看 | 91在线视频免费播放 | 国产精品一区二区免费看 | 色婷婷导航 | 久久久久久久久久久久久久av | 在线观看成人网 | 99久国产 | 天天做天天爱天天综合网 | 国产亚洲综合精品 | 91成人免费观看视频 | 久热电影| 日韩av综合网站 | 日日日操| 五月天天在线 | 亚洲成人资源在线观看 | 国内揄拍国产精品 | 久久精品视 | 国产精品免费视频久久久 | 在线日本v二区不卡 | 日韩av电影中文字幕 | 美女网站视频久久 | 狠狠色狠狠色综合日日92 | 在线播放国产精品 | 久久999久久 | 免费a网址| 婷婷综合影院 | 国产精品999久久久 久产久精国产品 | 亚洲九九九 | 国产精品扒开做爽爽的视频 | 久久精品国产精品亚洲精品 | av在线电影免费观看 | 免费在线观看不卡av | 国产美女精品久久久 | 日韩成人精品一区二区 | 久久91久久久久麻豆精品 | 狠狠干,狠狠操 | 最新av网站在线观看 | 欧美一二三区在线播放 | 亚洲美女在线国产 | 国产亚洲精品久久久久久电影 | 中文字幕资源站 | 日韩丝袜 | 国产成人av网 | 国产1区在线 | 天天操天天舔天天干 | 97看片网 | 丝袜网站在线观看 | 高清日韩一区二区 | 一区 在线观看 | 精品美女国产在线 | 亚洲影视九九影院在线观看 | 日韩免费视频线观看 | 久久久久久久久久久久av | 国产色在线,com | 精品国模一区二区 | 中文字幕网址 | 亚洲欧美乱综合图片区小说区 | 欧美精品一区二区蜜臀亚洲 | 91在线视频免费播放 | 国产在线自 | 国产精品免费小视频 | 91免费在线看片 | 91九色最新 | 久久老司机精品视频 | 国产欧美中文字幕 | 国产手机精品视频 | 91精品视频在线播放 | 久久综合偷偷噜噜噜色 | 一级欧美一级日韩 | 91香蕉国产在线观看软件 | 亚洲精品美女免费 | 在线电影91| 91久久精品日日躁夜夜躁国产 | 最新超碰在线 | 色夜影院| 国产黄 | 黄色三级免费 | 婷婷成人综合 | 久久伊人国产精品 | wwwwwww黄 | 国产一区视频在线观看免费 | 久久精品国产精品亚洲 | a级国产乱理论片在线观看 伊人宗合网 | 97网| 色哟哟国产精品 | 韩国av电影网 | www日韩在线| 日韩三级av | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产亚洲在线视频 | 日本系列中文字幕 | 五月天婷婷在线观看视频 | 国产三级国产精品国产专区50 | 国产一区二区手机在线观看 | 日本中文字幕网址 | 国产精品久久一区二区无卡 | 免费av大全 | 久久成人高清 | 久草久草久草久草 | 五月婷婷视频 | 国产一区二区在线免费 | 精品99在线观看 | 日韩电影久久久 | 深爱五月网 | 日本精品视频在线观看 | 在线看黄色av| 国产精品美| 国产午夜麻豆影院在线观看 | 免费久久精品视频 | 亚洲一区二区三区精品在线观看 | 麻豆91视频 | 天天夜夜狠狠操 | 免费在线观看av网站 | 在线观看一区 | 久久国产露脸精品国产 | 亚洲成人资源网 | 午夜精品久久久久久99热明星 | a级国产乱理论片在线观看 特级毛片在线观看 | 最近免费中文字幕mv在线视频3 | 国产视频 亚洲视频 | 精品视频成人 | 手机在线观看国产精品 | 三级小视频在线观看 | 韩国av免费观看 | 国产精品乱码久久久久 | 久久久久久97三级 | av中文字幕第一页 | 99久久综合狠狠综合久久 | 色综合在| 欧美精品中文字幕亚洲专区 | 国产剧在线观看片 | 视频一区亚洲 | 久久久精华网 | 亚洲无吗视频在线 | 国产小视频免费在线网址 | 国产福利免费看 | 丁香激情综合久久伊人久久 | 天天综合网久久综合网 | 日韩精品视频在线免费观看 | 国产97色在线 | 久久久久国产a免费观看rela | 久久国产福利 | 精品产品国产在线不卡 | 在线岛国av | 久久激情视频 久久 | 久久爽久久爽久久av东京爽 | 国产剧情一区 | 在线视频日韩 | 高清一区二区三区av | 免费看一级黄色大全 | www.神马久久 | 久久亚洲影院 | 久草在线免费播放 | 五月天久久综合 | 91人人爱 | 97超碰色偷偷 | 97**国产露脸精品国产 | 日韩大片在线看 | 久久综合狠狠综合久久狠狠色综合 | 久久电影日韩 | 成人免费在线视频 | av电影久久 | 手机看片国产 | 日本aaa在线观看 | 日本精品一区二区三区在线播放视频 | 国产高清日韩 | 一区二区三区观看 | 国产一区高清在线 | 欧洲性视频 | 国产99久久久国产精品成人免费 | 国产精品福利久久久 | 日本一区二区三区视频在线播放 | 国产精品久久久久一区二区三区共 | 91麻豆视频网站 | 六月丁香综合 | 亚洲精品男人天堂 | 久久99久国产精品黄毛片入口 | 黄色一级在线免费观看 | 国产精品久久久久婷婷二区次 | 4438全国亚洲精品在线观看视频 | www.久草.com| 九九激情视频 | 久久综合精品国产一区二区三区 | 不卡中文字幕av | 久草五月 | 久久99网站 | 超级碰视频 | 麻豆国产精品va在线观看不卡 | 一级一片免费看 | 999久久精品| 婷婷色资源 | 色综合久久久久久久久五月 | 久久久精品午夜 | 天天艹天天爽 | a成人v在线 | 国产在线精品观看 | 1区2区视频| 九九热在线视频 | 人人盈棋牌 | 黄污网 | 国产中文字幕一区 | 国产一二区精品 | 国产人在线成免费视频 | 九九免费在线观看视频 | 又黄又爽的视频在线观看网站 | 在线观看网站av | 国产成本人视频在线观看 | 91喷水| 九九日韩 | 国产精品毛片完整版 | 一二三四精品 | 9久久精品| 久久精品久久久久电影 | 婷婷色中文 | 99视频在线观看免费 | 国产色在线,com | 亚洲91视频| 99精品福利视频 | 精品久久久久久久久久国产 | 日本中文字幕系列 | 正在播放国产精品 | 在线观看的黄色 | 一区二区精品在线 | 日韩欧美综合在线视频 | 免费看污在线观看 | 久久综合精品国产一区二区三区 | 六月丁香六月婷婷 | 天天躁天天狠天天透 | 香蕉免费在线 | 99久久99热这里只有精品 | 国产精品a久久久久 | av电影中文字幕在线观看 | 九七视频在线观看 | 特级西西444www大胆高清无视频 | 天天综合成人 | 亚洲成av人片在线观看无 | 国产五月色婷婷六月丁香视频 | 亚洲精品美女在线 | 欧美在线视频一区二区三区 | 99热国产精品 | 视频在线观看91 | 亚洲久草网 | 高清av免费看| 日韩区欠美精品av视频 | 九九在线播放 | av久久在线 | 日韩美av在线 | 九九交易行官网 | 西西444www | 日韩有码第一页 | 亚洲精选视频在线 | 免费观看丰满少妇做爰 | 日韩欧美在线视频一区二区三区 | 天天干天天操av | 色av资源网| 国产精品自产拍 | 免费精品国产va自在自线 | www.久草.com| 国产精品中文字幕在线播放 | 欧美日韩国产综合一区二区 | 久热电影 | 国产淫片 | 中文字幕在线观看国产 | 欧美精品一区二区性色 | 一二三久久久 | 九色福利视频 | 最近免费中文视频 | 免费在线观看av片 | 国产精品私人影院 | 欧美韩国日本在线观看 | 欧美性生交大片免网 | 中文字幕 成人 | 国产午夜在线观看视频 | av线上看 | 国内精品久久久久影院优 | 亚洲一区免费在线 | 天堂网中文在线 | 天天射天天操天天 | 成人性生交大片免费看中文网站 | 久草电影网 | 91在线播 | 91成人在线观看喷潮 | 在线观看精品黄av片免费 | 国产精品午夜在线 | 草久久影院| 久99久精品视频免费观看 | 亚洲va天堂va欧美ⅴa在线 | 在线观看免费高清视频大全追剧 | 国产日韩精品在线观看 | 国产精品免费视频一区二区 | 免费黄色在线网站 | 国产午夜三级一区二区三 | 天天鲁一鲁摸一摸爽一爽 | 天天干夜夜爱 | 天天艹天天爽 | 91爱爱免费观看 | 免费视频91蜜桃 | 婷婷久月 | 成人午夜电影在线观看 | 天天插日日插 | 九九色网 | 天天操操操操操操 | 麻豆视频在线免费观看 | 日韩欧美电影网 | 日韩视频在线一区 | 一级片免费视频 | 国产精品久久久999 国产91九色视频 | 黄色成年网站 | 亚洲综合五月天 | 国产成人精品av久久 | 久草精品国产 | 91精品国产高清自在线观看 | 五月天激情视频在线观看 | 天天射天天操天天干 | 久久久综合香蕉尹人综合网 | 欧美日韩视频在线 | 国产欧美精品在线观看 | 毛片a级片 | 国产精品美女久久久久久久 | 久久影视精品 | 久久免费的精品国产v∧ | 狠狠色香婷婷久久亚洲精品 | 国产无套一区二区三区久久 | 欧美视频18 | 欧美日韩不卡一区二区三区 | 日韩av在线网站 | 日本在线观看黄色 | 日韩中文字幕a | 91久久国产露脸精品国产闺蜜 | 一区二区三区电影 | 日韩美在线观看 | 99精品视频在线播放观看 | 高清av网| 韩国在线一区二区 | 一区二区视频在线免费观看 | 中文字幕在线专区 | 国产精品影音先锋 | 亚洲精品久久久久久国 | 美女黄网久久 | 久久成人国产精品免费软件 | 欧美日韩不卡一区 | 在线观看黄av | 亚洲婷久久 | 97视频在线看 | 亚洲国内精品在线 | 激情婷婷av | 欧美淫aaa免费观看 日韩激情免费视频 | 日韩二区三区在线观看 | 精品国产乱码久久久久久1区二区 | 久久国产电影 | 午夜精品久久久久99热app | 国产精品成久久久久三级 | 欧美激情视频久久 | 成人黄色在线看 | 中文字幕av免费观看 | 久久综合久久八八 | 中文字幕乱在线伦视频中文字幕乱码在线 | a亚洲视频 | 91资源在线播放 | 久av在线| 婷婷伊人综合亚洲综合网 | 成人一区二区三区中文字幕 | 亚州精品天堂中文字幕 | 久久黄色网页 | 免费观看午夜视频 | 国产青春久久久国产毛片 | 精品a在线| 国产不卡视频在线播放 | 久视频在线播放 | 中文字幕在线播放视频 | 欧美日韩高清一区二区 | 狠狠躁18三区二区一区ai明星 | 精品国产成人av在线免 | 国产精品2区 | 国产精品高潮呻吟久久久久 | 免费a一级 | 91精品在线看 | 在线观看亚洲精品 | 日韩精品一区二区三区视频播放 | 久久都是精品 | 四虎国产永久在线精品 | 久久人人爽人人爽人人片av免费 | 欧美激情精品久久久久久免费 | 精品一区精品二区高清 | 久久激情小视频 | 超碰午夜| 亚洲天堂精品视频在线观看 | 最近更新中文字幕 | 在线播放 日韩专区 | 日韩免费一级a毛片在线播放一级 | 五月天国产精品 | 国产精品成人免费 | 亚洲永久在线 | 国产精品激情在线观看 | 日韩在线观看一区 | 天天干天天干天天 | 亚洲精品免费在线 | 99在线观看精品 | 天天干天天干天天干 | 亚洲午夜小视频 | 99re8这里有精品热视频免费 | 亚洲视频免费 | 一区二区三区视频网站 | 在线国产不卡 | 国产原创在线 | 97视频免费 | 日韩精品中文字幕在线播放 | 国产精品免费一区二区三区 | 久久久久五月天 | 91人网站 | 91成年人网站 | 天天插天天操天天干 | 特级西西444www大胆高清无视频 | 免费久久久久久 | 久热精品国产 | 五月婷婷六月丁香 | 911久久香蕉国产线看观看 | 一区二区不卡高清 | 在线播放视频一区 | 日韩av片无码一区二区不卡电影 | 91精品欧美 | 青青视频一区 | 久久久精选 | 大胆欧美gogo免费视频一二区 | 日韩中文字幕在线看 | 五月婷婷视频在线 | 中文字幕 欧美性 | 亚洲精品午夜久久久久久久久久久 | 中文字幕国语官网在线视频 | 69视频永久免费观看 | 久草电影免费在线观看 | 日韩一二区在线观看 | 99久久久久国产精品免费 | 成人性生交视频 | 国产精品xxxx18a99 | 成人黄色片在线播放 | 97色资源 | 欧美精品一区在线发布 | 国产精品一区二区久久久久 | 97人人看 | 精品国产一二三四区 | 亚洲另类交 | 国产小视频福利在线 | 激情综合婷婷 | 国产精品婷婷 | 51久久夜色精品国产麻豆 | 久久专区| 久久久国内精品 | www视频免费在线观看 | 久久久久北条麻妃免费看 | 免费黄色网址大全 | 人人爽人人做 | 久久久久久久久久久免费 | av一级片在线观看 | 五月婷久 | 欧美一区二区三区激情视频 | 五月婷婷丁香在线观看 | 天天操狠狠操 | 亚洲精品乱码久久久久久写真 | 欧美激情xxxx性bbbb | 免费色av| 99情趣网视频 | 99精品福利| 国产999精品久久久影片官网 | 在线观看中文字幕 | 国产精品系列在线 | 国产高清久久久久 | 黄色免费大片 | 久久精品8 | 久久久久成人精品 | 视频福利在线 | 亚洲麻豆精品 |