1 用法

右手边(RHS)是规则的后果或行动部分的通用名称; 此部分应包含要执行的操作列表。在规则的RHS中使用命令式或条件式代码是不好的做法; 作为一项规则应该是原子性的 - “当这个,然后做这个”,而不是“当这个,也许这样做”。规则的RHS部分也应保持较小,从而保持其声明性和可读性。如果您发现在RHS中需要命令式和/或条件代码,那么您可能应该将该规则分解为多个规则。RHS的主要目的是插入,删除或修改工作内存数据。为了帮助您,您可以使用一些方便的方法来修改工作记忆; 无需首先引用工作内存实例。

  • update(object, handle);将告诉Drools引擎一个对象已经改变(一个已经绑定到LHS上的东西)并且可能需要重新考虑规则。
  • update(object);也可以使用; 在这里,Knowledge Helper将通过身份检查为您查找传递的对象的事实句柄。(请注意,如果监听了插入Drools引擎的Java bean的属性,则应该避免在对象更改时调用update())。在事实的字段值发生更改后,您必须在更改另一个事实之前调用update,否则您将导致Drools引擎中的索引出现问题。modify关键字可以避免此问题。
  • insert(newSomething());会将你创作的新对象放入Working Memory中。
  • insertLogical(newSomething());类似于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语法详解相关推荐

  1. Python的Xpath介绍和语法详解

    1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...

  2. FreeMarker基本语法详解及模板文件的组成(二)

    海浪上次给大家分享了FreeMarker基本语法详解及模板文件的组成(一)海浪今天继续分享FreeMarker基本语法详解及模板文件的组成(二) 3.2 输出变量值<?xml:namespace ...

  3. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  4. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

  5. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  6. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  7. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

  8. python编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

  9. js 正则中冒号代表什么_javascript中正则表达式语法详解

    好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要 ...

最新文章

  1. Linux awk命令详解??????????(研究)
  2. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间...
  3. python写接口函数_python接口自动化测试二十:函数写接口测试
  4. 亚马逊靠“新闻稿”推动创新,跃居市值第一
  5. 加密解密技术基础、PKI及创建私有私有CA
  6. jredis和letucce_深入理解Redis(一)——高级键管理与数据结构
  7. QT5.9连接MySQL5.7解决QSqlDatabase: QMYSQL driver not loaded问题
  8. windows bat脚本实现快速配置JDK 环境变量
  9. 实时时钟芯片 DS1302使用手册
  10. [转载] 计算机端口详解
  11. STM32 Flash读写;Flash地址对应的存储内容及方式;
  12. Rational Rose 7.0安装教程
  13. waf防火墙是什么有什么作用?
  14. HP笔记本功能键(f1-f12)与fn键的使用
  15. c#拼图碎片形状_将碎片拼成完整的拼图
  16. html 取消回车,java去除html回车换行
  17. openstack是什么
  18. 产品众测 | 移动互联网保险展业工具竞品分析
  19. 竞争优势究竟是什么?
  20. 特征选择:概述与方法

热门文章

  1. Android 响铃与震动模式的
  2. python精彩编程200例 pdf-Python创意编程200例turtle篇
  3. python 小游戏——外星人入侵源码倾情奉献
  4. 计算机连接投影仪后黑屏咋调试,电脑连接投影机播放电影过程中经常性黑屏一秒故障解决一例-投影仪怎么连接电脑...
  5. Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army
  6. ant design pro v2 - 权限控制
  7. 宁静致远,静心修炼内功
  8. 关于实时时钟模块DS1302使用心得
  9. Linux虚拟机与主机无法Ping通,无法Ping通百度的解决办法
  10. 英语思维导图大全 前言(一)