sách gpt4 ai đã đi

drools - 比较 Drool 5.5 中的字符串值字段

In lại 作者:行者123 更新时间:2023-12-04 00:43:05 30 4
mua khóa gpt4 Nike

在使用 Drools 5.5 final 比较字符串值字段时,我遇到了一些令人费解的问题。

本质上,我试图找出是否有一对同名的人。 Person 类如下所示:

public class Person {
private String name;

public String getName() { return name; }
public void setName(String n) { this.name = n; }
public Person(String name) { this.name = name;}
}

我尝试触发的规则是:

rule "uniquePersonName"
khi
$p1: Person($n1: name)
$p2: Person(this != $p1, name == $n1)
sau đó
System.out.println("Duplicated person name found : " + $n1 + " " + $p2.getName());
kết thúc

但它从未被触发。但是,如果我将其更改为:

khi
$p1: Person($n1: name)
$p2: Person(this != $p1, name != $n1)

系统按预期工作,换句话说,它找到了所有姓名不同的人对。

深入挖掘后,我发现如果我将名称字段更改为 Integer 类型,则原始规则可以正常工作。这让我认为这是因为字符串比较的一些错误。因此,将 name 字段定义为 String 类型,我尝试了:

  1. 不是 (name == $n1)
  2. (名字== $n1)
  3. name.toString() = $n1.toString()
  4. name == $p1.getName()

不幸的是,它们都不起作用。

最后,我能让它正常运行的唯一方法是将规则写成:

khi
$p1: Person($n1: name)
$p2: Person(name == $n1)
eval($p1!=$p2)

这让我觉得问题可能是由 cái này 的工作方式和字符串比较的完成方式共同引起的。

这是非常基本的功能,我很惊讶这是由 Drools 5.5 final 中的错误引起的。但同样,我看不到出路。你们能帮忙吗?

Cảm ơn.

毛重

1 Câu trả lời

事实证明,this != $p1 转换为 !this.equals($p1),在我的代码中,我有一个自动生成的 equals 方法(原始帖子中未显示代码),这完全改变了默认的比较行为。删除 equals 方法后,一切都按预期工作。

关于drools - 比较 Drool 5.5 中的字符串值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782397/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com