计算机系统应用教程网站

网站首页 > 技术文章 正文

50-drools基础语法(内置方法_retract方法)

btikc 2024-11-16 17:20:41 技术文章 1 ℃ 0 评论

接下来继续来看insert内置方法。接下来要讲的是insert方法,这个方法的作用是什么?是删除工作内存中的数据,并且让相关的规则重新匹配。

继续还是在规则文件student.dr规则文件里面来测试,同样再往前再来写一个,规则要测试的是insert的方法。这个方法是这样的,在这来编写一下,入了,要求也是等于十岁。但是要注意当前这两个规则的名称是不是相同了,规则的名称应该是唯一的不能相同。

在这是用于删除,主要就是改一下,别让名字相同,摁的。注意看规则条件也是等于十岁。有的同学肯定说这两个条件是不是完全一样,这样这两个规则是不是都执行了?在这只希望让上面规则执行,下边规则不执行。

怎么做到?是这样的,上面规则执行了,执行完之后把死丢的删掉,删掉之后是不是相当于工作内存里面就没有fact对象了?所以第二个规则就不会匹配到了。所以在这可以通过调用retract的方法,把工作内存里面fact对象删除掉。

这个是方法,retract方法的作用是什么?是删除工作内存中的fact对象,会导致相关规则重新匹配。所以重新匹配还能匹配到吗?就匹配不到了,因为已经把对象删除掉了。

在这输出一下规则,把规则的名称拷过来,触发了。但是可能有的同学会有疑问,就说这两个规则的匹配条件都一样,在这个地方删除了它了,删除死对头了,怎么保证是先执行规则再执行下边规则?如果是先执行下边规则,因为已经执行完了,再删除是不是就同时因为已经执行过了?

所以如何保证先执行上面这个,然后再执行下边规则,如何保证执行的顺序?用到一个属性,后边也会讲到,就是在规则属性这有一个叫做insert,这个叫做什么?其实就是执行的优先级,执行的优先级,所以可以在这来指定一下。

其实如果不指定,默认情况下优先级都是一样的,这个时候就会按照规则文件编写的先后顺序,谁在前面谁先执行。如果通过优先级也可以,也可以,就是这个叫做cellus,这个优先级就是指定数值,默认应该是零,在这给个十,给个十就意味着一定是先执行,再执行下边这个。

其实对于当前文件其实不写也是可以的,因为什么?因为优先级相同的情况下是由上到下这种顺序来执行的,如果用它就更明确了执行的顺序,所以这个属性后边还会讲,所以在这简单解释一下就可以了。

接下来来看一下,现在a值是不是等于十,正好设置的是十,所以来执行一下,看一下效果,是不是只有第一个规则触发了,而后边第二个规则并没有触发,就是因为在这个地方是不是把它给删除掉了,导致第二个规则是不是没有匹配成功。

如果把这一个给注视起来,也就不再删除student的对象了,这样也就匹配到了,匹配到之后是不是也会执行,同时因为执行了,是不是又insert了一个新的对象进来,所以会导致执行,所以这就是一连串的连锁反应,最终所有的规则就都执行了。

来看一下效果,现在把删除方法是不是给注视起来了,所以所有的规则就都触发了。

这个就是关于retract的方法,内置方法的作用就是删除工作内存里边的fact对象,并且会让相关的规则重新来匹配。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表