繁体   English   中英

在流口水中对LHS使用辅助方法

[英]Using helper methods on LHS in drools

我正在学习流口水,并试图了解最佳实践。 之间有什么实际区别:

when
    $event : Event(Helper.notNull(foo),...)

when
    $event : Event(foo != null,...)

假定Helper.notNull是Java中的静态方法,该方法仅检查object是否为null。

我已经在两个相同的规则和一个符合所有条件的事件上对此进行了测试,并且只调用一次helper方法,因此看起来流口水能够缓存值。 (我最糟糕的期望是它将急切地评估每条规则)

我觉得使用辅助方法与本地流口水操作可能会有一些细节。

如果将我的问题概括化,则听起来会像是:“在when子句中调用返回布尔值的助手是否安全?” (例如,如果我使用Objects.equals(a,b)而不是编写a == b)

Drools(在6.x中)评估布尔表达式。 简单比较运算符和实现相同运算符的方法之间是否存在“实用上的区别”:两者都将得出相同的结果,并且简单运算符避免了调用的开销。

您所谓的“缓存”是Drools 尽可能结合相同约束的结果,但是不能保证所有此类表达式都可以一直被缓存。

通过简单的比较,编写相同的评估方法没有任何好处。 必要时,Drools调用==!= equals

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM