- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑到 Drools,我一直在努力解决一个问题,这是我最后的选择。
假设我有一个包含 3 个人的列表:[1, 2, 3]。将此列表视为这些人的 ID 值列表。现在,我想按以下顺序评估这些人的所有独特对:
我的电子表格的规则表如下所示:
它利用了这条评论中提到的技巧:Drools compare two objects in decision table .
Person 类已正确导入,三个人已插入到 session 中,每个 Person 对象都有一个 getId()
。方法。
但是,运行 fireAllRules()
在 session 上给我以下输出:
您可能会注意到这是我想要的结果集的补充。
请注意!胡乱猜测后,原来是改变条件id > $id1
至 id < $id1
解决了这个问题,但随后逻辑在我脑海中似乎不匹配。
我试图模仿的规则如下所示:
rule "same-company"
when
$p1 : Person($id1 : id)
$p2 : Person($id2 : id, id > $id1)
then
System.out.println($p1.getId() + " " + $p2.getId());
end
此规则在 .drl 文件中运行良好,并且符合预期!
所以我的问题是:
我在 Person 对象中还有一些更复杂的变量,我想对其应用逻辑(每个人的字符串映射,我想比较其值),同样的事情也会发生;当我设置的条件未得到满足时,Drools 电子表格似乎让规则通过。针对相反的目标是可能的,并且有效,但对我来说,这似乎不是它应该起作用的方式。
提前致谢!
package org.ps.dtable;
//generated from Decision Table
import org.ps.orm.Person;
// rule values at C12, header at C7
rule "PSBR_12"
when
$p1:Person ($id1: id) $p2:Person($id2:id, id > $id1 /*param*/ == "X")
then
System.out.println($p1 + " vs " + $p2);
end
Excel 电子表格如下所示:
编辑 2:/*$param*/
中的 $失踪了,引起了奇怪的评价。学过的知识;永远不要忘记钱。
最佳答案
我没看到运算符 <
或 >
可以生产1 vs 1
,但这可能不是最重要的问题。
更重要的是,我无法使用 5.5 版重现此问题。
旧版本可能以不同方式处理这种特殊情况。然后重要的是要意识到电子表格编译器将约束(第 4 行中的内容)压缩到第 3 行的括号中(除非行是根据不同的模式形成的,添加了 ==自动)。您可以尝试在第二个 Person 之后添加一对括号
CONDITION
$p1:Person($id1:id) $p2:Person()
$id2:id > $id1 /*$param*/
pairs ordered by ascending id
如果这不起作用,您必须升级。
PS:对于调试,打印生成的 DRL 是必不可少的。在 Drools - Using "from" in decision table 中查看我的回答
PPS:仔细阅读总是有帮助的。我忽略了你有 /* param */
在你的问题中没有美元符号,所以生成的规则有 == "X"
附加到约束。看起来很奇怪,它以一种非常奇怪的方式编译和评估,我无法立即弄清楚。可能任何不等于“true”的字符串都被认为等于“false”,然后它会像否定一样工作并产生你无法弄清楚的结果。难怪。 (很可能,MVEL 评估处于底部,这产生了其他莫名其妙的效果。)
关于java - Drools 决策表对象比较给出了相反的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686410/
Drools中物理包和包声明有什么用。 例如, 我有一个规则,物理包com.mycompany中的Myrule.drl 据我所知,drools 中的包声明不依赖于文件所在的实际物理包。 所以我可以将
我是 drools 的新手,并且熟悉使用 extends 关键字来继承规则。问题有没有办法继承多个规则?这类似于在 java 类上使用多个接口(interface)。这是我希望它如何工作的示例,但我在
我们使用 Drools 作为解决方案的一部分,在非常密集的处理应用程序中充当一种过滤器,可能在 500,000 多个工作内存对象上运行多达 100 条规则。 事实证明它非常慢。 其他人有在批处理类型处
我是 Drools 的新手,正在尝试让示例程序正常工作。drools 文档 http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert
我正在使用 drools-camel-server 5.4 Final 来执行从 jboss AS7 上的 guvnor 获取的规则,如下所示: 如何重新加载或重建知识库
我想将我的 .drl 文件预编译为 .class 文件,这样它们就不必在运行时编译。文档使它听起来像 kie-maven-plugin 这样做,但它没有为我生成任何东西。它编译规则文件但不输出任何内容
我正在尝试使用 Drools 向后链接来找出需要哪些事实才能将对象插入到工作内存中。在下面的示例中,我期望得到事实“go2”。 rule "ins a" when String( this =
是否可以通过规则名称触发 drool 文件中的规则?我的要求是,我的规则文件将包含所有规则的列表 (S)。但我有一个单独的配置,其中包含要触发的规则名称列表 (A)。注意 (A) 是 (S) 的子集。
我的项目使用 drools 专家手段 (DRL) 文件。在规则文件中,如果用户想删除和更新规则,应该怎么办? 规则文件: package com.sample; import com.sample.T
我被要求开始探索用于某些客户端演示的 Activiti 工具。 该演示还将包含与 Activiti 集成的 JBoss Drools。 我对这两种工具和业务流程世界都不熟悉,所以如果问题很愚蠢,请原谅
Ciao,我已经测试了几种方法,但我仍然无法在Drools Fusion中测试和验证事件过期机制,所以我正在寻找一些指导,好吗? 我已经阅读了手册,我对这个功能很感兴趣: In other words
我试图在 Drools 6.5 中创建两个独立的规则组,但我无法弄清楚规则流组和议程组策略的用例是什么。他们两个看起来很相似。 最佳答案 阅读文档... 2.6.4. RuleFowGroup 和 A
我是 Drools 新手。我正在创建规则,但出现编译时错误 "field is not visible'. 我尝试检查 Jboss 示例,其中使用方言“mvel”。它编译了。我听不懂方言。那么 dia
我正在尝试设置 kie 执行服务 (kie-server-services-6.2.0) 以供 kie-drools-wb-webapp-6.2.0 提供,当我尝试通过以下 webapp url执行服
我想实现规则引擎,其中如果仅执行一个条件,则它不会检查其他指定的条件。 rule "Print out lower-case tokens" when Token ( coveredText
我拥有所有必需的 JAR。尽管面临以下问题: java.lang.ClassCastException: org.drools.io.impl.ClassPathResource cannot be
我正在尝试 Redhat Drools,并且能够在 WildFly 环境中部署 Drools Workbench。我试图找出如何将规则公开为服务,但找不到关于如何做到这一点的文章。这是对 Drools
在使用 Drools 5.5 final 比较字符串值字段时,我遇到了一些令人费解的问题。 本质上,我试图找出是否有一对同名的人。 Person 类如下所示: public class Person
我正在寻找一个好的规则引擎。 我已经看到它存在两个好的项目:JBPM和Drools。 我不太了解两者之间的区别,也不知道要使用什么理想工具。 请您向我提供更多信息以及您在其他方面的经验,以及您认为最适
我们可以在 Excel 表格中编写 Drool 规则吗?规则可以用于简单的人类可读内容吗?如果我们可以,那该怎么做呢?请解释。 最佳答案 是的,你可以。阅读用户指南中名为“电子表格中的决策表”的部分如
我是一名优秀的程序员,十分优秀!