gpt4 book ai didi

drools - 我不能在分配给变量的集合上使用 contains 运算符吗?

转载 作者:行者123 更新时间:2023-12-02 07:15:59 26 4
gpt4 key购买 nike

如果有人能向我解释为什么这是非法的,我将不胜感激:

rule "some rule name"

when
$a : A($bset : bset)
$bset contains B(x == "hello")
then
//do something
end

地点:

public class A {
private Set<B> bset = new HashSet<B>();
//getters and setters for bset
//toString() and hashCode for A

public static class B {
private String x
//getters and setters for x
//toString() and hashCode() for B
}
}

Drools eclipse 插件的错误不是很有帮助。它提供了以下错误:

[ERR 102] 第 23:16 行规则“某些规则名称”中的输入“包含”不匹配

错误出现在“bset contains...”行上

我搜索了 Drools 文档以及我拥有的一本书,但没有发现这些示例在这方面非常具有说明性。

最佳答案

“contains”是必须在模式内部使用的运算符。 $bset contains B(x == "hello") 在这种情况下不是有效模式。有几种方法可以实现您想要做的事情。这是其中之一:

rule "some rule name"
when
$a: A($bset : bset)
$b: B(x == "hello") from $bset
then
//you will have one activation for each of the B objects matching
//the second pattern
end

另一个:

rule "some rule name"
when
$a: A($bset : bset)
exists (B(x == "hello") from $bset)
then
//you will have one activation no matter how many B objects match
//the second pattern ( you must have at least one of course)
end

如果您想了解如何使用 contains 操作,并且 B 对象也是 session 中的事实,您可以编写如下内容:

rule "some rule name"
when
$b: B(x == "hello")
$a: A(bset contains $b)
then
//multiple activations
end

或者:

rule "some rule name"
when
$b: B(x == "hello")
exists( A(bset contains $b) )
then
//single activation
end

希望对你有帮助

关于drools - 我不能在分配给变量的集合上使用 contains 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20063145/

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