在这里提到的文档( https://docs.jboss.org/drools/release/7.2.0.Final/drools-docs/html_single/ )中,没有为when子句中使用的eval()方法提供优化细节。假设callMethod将输入字符打印到日志中,并盲目地返回false。
rule "Rule1"
when
eval( callMethod('r') )
then
..
drools.halt();
end
rule "Rule2"
when
eval( callMethod('r') )
then
..
drools.halt();
end
rule "Rule3"
when
eval( callMethod('r') )
then
..
drools.halt();
end
rule "Rule4"
when
eval( callMethod('r') &&
callMethod('x')
)
then
..
drools.halt();
end
rule "Rule5"
when
eval(callMethod('x')
)
then
..
drools.halt();
end为什么引擎会打印:
r //probably from rule 1
r //Rule 4
x //Rule 4 again而不是
r
r
r
r
x
xdrools在这里使用的优化技术是什么?这有点令人困惑。
发布于 2017-11-02 15:49:08
由Charles L.Forgy博士在1979年开发的Rete算法的基本思想是从产生式规则的左侧组件中提取逻辑表达式网络。
结果是,相同表达式的求值不能再与其在规则代码中的文本外观相关联。
无法以此格式解释详细信息。谷歌和研究。
https://stackoverflow.com/questions/47066616
复制相似问题