变量

drl

package com.sampleimport com.sample.Person;
import com.sample.Pet;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;// 设置全局变量,需外部传入
// 局部变量就不说了,哪都有用着的
global com.sample.Person person;rule "global_test"wheneval(true)then// 打印全局变量System.out.println("inner : " + person.toString());// 全局变量直接修改,不需要更新操作person.setName("judas");
end

java

    public static final void main(String[] args) {try {KnowledgeBase kbase = readKnowledgeBase();StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");// 构造全局对象Person person = new Person();person.setName("godme");// 插入全局对象,通过全局变量名传入对象ksession.setGlobal("person", person);ksession.fireAllRules();// 外部通过变量名获取全局变量Object outter = ksession.getGlobal("person");// 打印检测System.out.println("outter : " + outter);logger.close();} catch (Throwable t) {t.printStackTrace();}}

类声明

内部使用

drl

package com.sampleimport com.sample.Person;
import com.sample.Pet;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;// declare基础结构
/*1. 声明2. 属性3. 结束基本结构如下declare className@metaAttr(metaValue)attr:type @metaAttr(metaValue)end其中主要注意三点1. className即类名2. 属性先名称后类型,用冒号隔开(typeScript?)3. 元数据属性声明习惯就好,元数据当做注解理解就行,仍然有这几个特点1. 修饰对象1. 直接写在属性级别表示修饰声明类2. 写在属性后表示修饰属性2. 取值没有赋值,后跟括号,直接写里面即可3. 操作除了些特殊的元数据,基本没作用(遇见再说)(后续应该和注解一样可以自定义?)
*/
declare Actor@auth(godme)name:String @maxLength(5)age:intbirth:java.util.Date
endrule "declare_test"wheneval(true)thenActor actor = new Actor();// 根据规范,自带get和set方法actor.setName("godme");actor.setAge(22);actor.setBirth(new Date());// toString自带System.out.println(actor.toString());
end

java

public static final void main(String[] args) {try {KnowledgeBase kbase = readKnowledgeBase();StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");// 空插即可ksession.fireAllRules();logger.close();} catch (Throwable t) {t.printStackTrace();}}

外部调用

drl

package com.sampleimport com.sample.Person;
import com.sample.Pet;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;declare Actor@auth(godme)name:String @maxLength(5)age:intbirth:java.util.Date
endrule "declare_test"when$actor:Actor()thenSystem.out.println($actor.toString());
end

java

 public static final void main(String[] args) {try {KnowledgeBase kbase = readKnowledgeBase();StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");// 知识库获取类型// 1. 知识库,而不是session// 2. 两个字符串:包名 和类名FactType type = kbase.getFactType("com.sample", "Actor");// 反射一般的用法Object object = type.newInstance();// 设置对象,指定设置属性(python setattr ? )type.set(object, "name", "godme");type.set(object, "age", 23);type.set(object, "birth", new Date());// 都是键值对,干脆Map设置Object object2 = type.newInstance();HashMap<String, Object> attrMap = new HashMap<>();attrMap.put("name", "fucker");attrMap.put("age", 99);attrMap.put("birth", new Date());type.setFromMap(object2,attrMap);// 插入ksession.insert(object);ksession.insert(object2);ksession.fireAllRules();logger.close();} catch (Throwable t) {t.printStackTrace();}}

结果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Actor( name=fucker, age=99, birth=Thu Aug 30 14:27:50 GMT+08:00 2018 )
Actor( name=godme, age=23, birth=Thu Aug 30 14:27:50 GMT+08:00 2018 )

方法定义

drl

package com.sampleimport com.sample.Person;
import com.sample.Pet;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;// 1. function 关键字,声明方法
// 2. 函数名称和块声明(大括号,不再是end了)同java
function start(){System.out.println("start");
}
// 3. 空返回值void,不写默认为void
function void over(){System.out.println("over");
}
// 4. 可以传入参数,进行操作
function void show(String $message){System.out.println($message);
}
// 5. 支持多参
// 6. 可以有返回值
function int add(int a, int b){return a + b;
}
rule "declare_test"wheneval(true);then// 调用start();int $sum = add(46,54);show("sum : " + $sum);over();
end// 其实只有两个变化,其他的全是java方法的套路
// 1. 修饰符统一用function替换(public?private?protected?synchornized?finl?)
// 2. void可省略

java

 public static final void main(String[] args) {try {KnowledgeBase kbase = readKnowledgeBase();StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");// 空插启动即可ksession.fireAllRules();logger.close();} catch (Throwable t) {t.printStackTrace();}}

结果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
start
sum : 100
over

drools-自成一派相关推荐

  1. python 颤音_自成一派,这个作曲大师确实名副其实!

    AWS DeepComposer 是一项教育型的 AWS 服务,可以训练出生成式人工智能,并利用 GAN(Generative Adversarial Network)转换输入的旋律,创作出完整的原创 ...

  2. NLP预训练家族 | 自成一派的GPT!

    作者 | 周俊贤 整理 | NewBeeNLP 之前我们梳理了NLP预训练家族系列文章,今天继续来看看另外一个分支,GPT系列! GPT2论文全称及链接:<Language Models are ...

  3. mysql查询提示_MySQL自成一派的查询提示

    [查询提示] MySQL中可以给select语句各种提示,比如告诉它"查询的结果集特别大,请直接用磁盘临时表","请让这条select优先执行" .... [查 ...

  4. 自成一派的正则表达式

    re 正则表示式  正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编 ...

  5. 自成一派的风格楷体字体

    楷体又被称做是活体,是一种模仿手写习惯的一种字体,笔画挺秀均匀,字形端正,广泛地用于学生课本.通俗读物.批注等.楷体比起屏幕显示领域更多的是出现在创作设计上.小编今天要给大家推荐的是经过改善后可以广泛 ...

  6. Set与List的前辈是Collection,Map自成一派

    一.Set的内部是基于Map,其值存储在k中,由于key是唯一的,故Set内的值具有不可重复性 由于TreeSet中含有SortSet,故其值的存储是有序的(大多基于Tree的都是有序的) 二.Map ...

  7. 微信与此ipad不兼容电脑也显示设备版本过低9.0_全面升级 自成一派 iPadOS 14更新让你的iPad更好用...

    北京时间2020年6月23日凌晨1点,第31届苹果全球开发者大会(WWDC 2020)在线进行了首日演讲,期间来自155个国家和地区的2300多万名开发者,与苹果共同见证此次会议的召开.在会上公布了苹 ...

  8. 构建现代化的命令行工具

    文章源于 lambdas.dev 每当我们想要创建一个基于 NodeJS 的命令行工具时,就会衍生出一堆问题需要解决,比如如何准备开发环境,如何打包转译代码,如何使代码在转译后保持可调用的状态同时尽可 ...

  9. 看完 50000 张专辑封面,AI 设计师开始疯狂输出

    西班牙艺术家利用 StyleGAN2 打造了一个 AI 设计师,借助 50000 张图像自学成才,没想到培养一个印象派设计师这么简单. 作者 | 三羊 来源 | HyperAI超神经 头图 | 网友整 ...

  10. 对话谢宝友:搞真正自研的国产操作系统,而不是伪创新

    作者 | 郑丽媛 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 从国外操作系统的长期垄断到中国自主研发操作系统数十年的起落浮沉,技术自主创新独立已成为国产基础软件的主要突破口.近几年间 ...

最新文章

  1. Captaris Workflow 6.0 EventService 执行效率低下的排除。
  2. vs2015 企业版、专业版如何破解(秘钥)
  3. Android的单位px,pt,dp,sp总结和获取屏幕分辨率
  4. Linux驱动编程 step-by-step (九)字符设备模拟pipe的驱动程序
  5. 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号
  6. 【软件项目管理】滨江学院 李振宏 软件项目管理 试卷考点知识点整理
  7. 面试题:数据库的优化
  8. 解决 mac系统下sublime imput 函数交互问题
  9. cocos2d-js 3.0 ios平台编译打包
  10. 最美翻译官(适配器模式)
  11. EBS日记账冲销API
  12. HTML的标准模式与怪异模式
  13. Android发展趋势分析,droidcon北京2017安卓技术大会参会感悟
  14. IBM造海水电池,“搅局”锂电池产业?
  15. linux用不了wifi密码忘记了,极路由wifi密码忘记了怎么办?
  16. Word文档如何转PPT
  17. 管理学院人工智能蹭课一
  18. 喵帕斯之矩阵 SDUT
  19. 零基础入门智能射频---python的无人机测向天线自动化设计
  20. 机器学习_非参数估计

热门文章

  1. 狄利克雷分布公式_Dirichlet Tree Distribution(狄利克雷树分布)
  2. 购买电脑时,关于CPU和显卡
  3. 华为手机误删照片,除了相册恢复,还有这招能救命
  4. OpenFaceswap 入门教程(1):软件安装篇
  5. 快手提前批--Java开发面经
  6. 计算机科学类专升本复习之“C语言结构体”详解(初稿)
  7. 阿里系App抓包详细分析
  8. Linux系统下detectron2安装(cuda11为例)
  9. java中的build类_30 Java设计模式系列-建造者(Build)模式
  10. Linux命令--tac(倒序查看文件所有内容)