gpt4 book ai didi

java - Drools 7 DRL 文件中的访问事实

转载 作者:行者123 更新时间:2023-12-02 11:34:24 26 4
gpt4 key购买 nike

我正在使用 Drools 7 将字符串传递到 drools 规则中:

public static void main(String[] args) {
log("Starting");

KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession ksession = kc.newKieSession("RulesKS");
ksession.insert( "asdf" );
ksession.fireAllRules();

ksession.dispose();
log("Done");
}

请注意,我正在设置一个值为 asdf 的“事实”来运行规则。这是我的规则文件:

package drools7

function boolean ifContains(String target, String searchFor) {
return target.indexOf(searchFor) != -1;
}

rule "First Rule"
salience 90
when
eval(ifContains("target", "et"))
then
System.out.println("Does contain");
end

现在,当我运行我的主要方法时,我看到:

Does contain

打印到标准输出,但是我如何在 drools 规则文件中检查我插入的实际情况?

这是如何工作的?我想看看事实是否包含“et”,而不是标量值?

最佳答案

我建议您阅读Drools official documentation和/或先预订一些 Drools 书。

对于您的特定情况,您需要做的是在规则的左侧编写与您的事实相匹配的模式:

rule "First Rule"
salience 90
when
String(ifContains(this, "et"))
then
System.out.println("Does contain");
end

您甚至可以通过使用 contains 运算符来优化您的规则,以避免使用不必要的函数定义和调用:

rule "First Rule"
salience 90
when
String(this contains "et")
then
System.out.println("Does contain");
end

希望对你有帮助

关于java - Drools 7 DRL 文件中的访问事实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com