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(new
Something());
会将你创作的新对象放入Working Memory中。insertLogical(new
Something());
类似于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语法详解相关推荐
- Python的Xpath介绍和语法详解
1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...
- FreeMarker基本语法详解及模板文件的组成(二)
海浪上次给大家分享了FreeMarker基本语法详解及模板文件的组成(一)海浪今天继续分享FreeMarker基本语法详解及模板文件的组成(二) 3.2 输出变量值<?xml:namespace ...
- Velocity魔法堂系列二:VTL语法详解
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- Java8初体验(二)Stream语法详解(转)
本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...
- python编程语法大全-Python编程入门——基础语法详解
今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...
- python编程语法-Python编程入门——基础语法详解
今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...
- python编程if语法-Python编程入门基础语法详解经典
原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...
- python编程语法-Python编程入门——基础语法详解(经典)
今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...
- js 正则中冒号代表什么_javascript中正则表达式语法详解
好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要 ...
最新文章
- Linux awk命令详解??????????(研究)
- 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间...
- python写接口函数_python接口自动化测试二十:函数写接口测试
- 亚马逊靠“新闻稿”推动创新,跃居市值第一
- 加密解密技术基础、PKI及创建私有私有CA
- jredis和letucce_深入理解Redis(一)——高级键管理与数据结构
- QT5.9连接MySQL5.7解决QSqlDatabase: QMYSQL driver not loaded问题
- windows bat脚本实现快速配置JDK 环境变量
- 实时时钟芯片 DS1302使用手册
- [转载] 计算机端口详解
- STM32 Flash读写;Flash地址对应的存储内容及方式;
- Rational Rose 7.0安装教程
- waf防火墙是什么有什么作用?
- HP笔记本功能键(f1-f12)与fn键的使用
- c#拼图碎片形状_将碎片拼成完整的拼图
- html 取消回车,java去除html回车换行
- openstack是什么
- 产品众测 | 移动互联网保险展业工具竞品分析
- 竞争优势究竟是什么?
- 特征选择:概述与方法
热门文章
- Android 响铃与震动模式的
- python精彩编程200例 pdf-Python创意编程200例turtle篇
- python 小游戏——外星人入侵源码倾情奉献
- 计算机连接投影仪后黑屏咋调试,电脑连接投影机播放电影过程中经常性黑屏一秒故障解决一例-投影仪怎么连接电脑...
- Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army
- ant design pro v2 - 权限控制
- 宁静致远,静心修炼内功
- 关于实时时钟模块DS1302使用心得
- Linux虚拟机与主机无法Ping通,无法Ping通百度的解决办法
- 英语思维导图大全 前言(一)