drools中提供了一些内置的函数,可以对工作内存中的Fact对象进行操作,其中delete和retract都是对Fact对象的删除操作。delete基本使用语法如下:

rule "test-result"

when
    $u : User();
then
    $u.setCode("fail");
    $u.setDesc("校验失败");
    delete($u);
//    retract($u);
end

上述使用中delete和retract是等效的,都是将Working Memory中的User对象删除。比如上述代码中,当触发了规则,也就是说不再使用User对象了,那么就可以对其进行清理。

delete和retract对应的功能都是删除,但是随着版本的发展,retract已经被废弃,由delete替代。我们知道这些内置函数是KnowledgeHelper接口实现的快捷操作,我们在该接口中可以看到retract已经被废弃且由delete替代的注释说明:

    /**
     * @deprecated Use delete
     */
    void retract(FactHandle handle) ;

    /**
     * @deprecated Use delete
     */
    void retract(Object handle);


drools的delete和retract函数使用插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2021/03/27/drools-delete-and-retract/