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.
在表达式中可以引用在
LHS
中出现的变量,和在
rule package
中的
Functions
。一个
Eval
应该是
LHS
中的最后一个
Conditional Element
。在一个
rule
中,你可以有多个
eval
。
Eval
不能被索引,因此不能像
Field Constraints
那样被优化。尽管如此,当
Functions
的返回值一直在变化时,应该使用
Eval
,因为这在
Field
Constraints
中时不允许的。如果规则中的其他条件都匹配,一个
eval
每次都要被检查。(现在还不理解到底
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
中某对象的非存在性。现在,只有
Columns
可以放在
not
中,但是将来的版本会支持“
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
中某对象的存在性。可以将“
exists
”理解为“至少有一个”(
at least one…
)。它的意义不同于只有
Column
本身,“
Column
”本身可以理解为“对于每一个
…
”(
for each of …
)。如果你对一个
Column
使用了“
exists
”,那么规则将只
activate
一次,而不管
WorkingMeomry
中有多少个数据匹配了那个条件。
现在,只有
Columns
可以放在“
exists
”中,但是将来的版本会支持“
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
的作用相当于代数学中的“()”,显式的指明操作的顺序。
5.6
再谈自动装箱和原始类型
Java 5
支持在原始类型与其对应包装类之间的装拆箱。尽管如此,因为要让
drools
能够在
J2SE 1.4
下运行,我们不能依靠
J2SE
。因此,
drools
自己实现了自动装箱。被引用(即被
Bound Variable
绑定)的
Field
将被自动进行装箱(如果它们本身就是
object
,就不会有任何变化)。尽管如此,必须要注意的是,他们并不会被自动拆箱。
还有一点要注意的,就是对于
ReturnValue
Constraints
,返回值的代码必须返回一个对象,而不能是一个原始类型。
6
.
Query
Figure 6.1 . query
一个
query
只包含了一个
rule
的
LHS
结构(你不用指定“
when
”或“
then
”)。这是查询
WorkingMemory
中匹配条件的
Facts
的简单的方法。
要得到结果,要使用
WorkingMemory.getQueryResults(“name”)
方法,其中“
name
”就是
query
的名字。
Query
的名字在
RuleBase
中是全局的,所以,
do not add queries of the
same name to different packages for the same RuleBase
。
下面的例子创建了一个简单的
query
来查询所有年龄大于
30
的人:
Example 6.1. Query People over the age of 30
query
"
people over the age of 30
"
person : Person( age
>
30
)
end
我们通过一个标准的循环来迭代一个返回的
QueryResults
对象。每一次的
iterate
将返回一个
QueryResult
对象。我们可以用
QueryResult
对象的
get()
方法来访问每个
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
"
);
}
分享到:
相关推荐
### JBoss Drools 规则引擎详解 #### 一、引言 《JBoss Drools Business Rules》是一本由 Paul Browne 编写的书籍,首次出版于2009年,该书旨在介绍如何利用 JBoss Drools 捕获、自动化及重用业务流程。本书版权...
### Drools JBoss Rules 5.0 Developer's Guide:规则引擎技术详解 #### 一、概述 《Drools JBoss Rules 5.0 Developer's Guide》是一本深入讲解Drools规则引擎技术的书籍。本书由Michal Bali编写,旨在帮助读者...
### jBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 ##### 1.1 什么是规则引擎 规则引擎是一种软件系统,它能够基于一组预定义的规则来处理数据,进而推导出结论或者执行特定的操作。规则引擎的...
Drools支持多种规则语言,如DRL(Drools Rule Language)等,使得业务规则的编写变得直观而简洁。 #### 二、Drools5开发环境搭建 **1. 开发前的准备** - **JDK环境**: 使用Drools5需要确保开发机器上已经安装了JDK...
### JBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 1. **规则引擎定义**: - 规则引擎是一种软件系统,它使用预定义的规则来处理数据,以得出结论或采取行动。 - **背景介绍**:规则引擎的发展...
Drools (JBoss Rules) 是一个开源的BRMS,它支持业务规则的定义、管理和执行。Drools的特点包括: - **易于使用:** 业务分析师和审查人员可以直接查看和修改规则。 - **标准化:** 符合业内标准,如JSR94。 - **高...
Drools 是一款使用 Java 编写的开源规则引擎,其核心功能是提供一种声明式的方式来表达业务逻辑,允许开发者以非 XML 的本地语言编写规则,简化了学习曲线并提高了易读性和可维护性。Drools 使用 REte 算法处理规则...
### BRMS (JBoss Rules Management System) 手册详解 #### 一、BRMS简介与应用价值 BRMS,即Business Rules Management System,是JBoss提供的一个基于Drools规则引擎的企业级业务规则管理系统。BRMS的目标是为...
2. **Bob McWhirter**(JBoss Rules/Drools 项目创始人): - 指出本书适合所有需要解析或翻译文本的人。 - 表明ANTLR不再仅限于语言设计者使用。 3. **Neal Gafter**(Java 倡导者及编译器专家,曾在 Sun ...