Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 在drl中收回事实时的NullpointerException_Drools - Fatal编程技术网

Drools 在drl中收回事实时的NullpointerException

Drools 在drl中收回事实时的NullpointerException,drools,Drools,我在运行规则时收到一个NullPointerException;我简化了DRL文件以重现问题 以下是我的版本: 基尤版本:7.53.0.1最终版本 jboss/business central workbench showcase:最新版本 当我触发此规则时,Drools抛出一个NullPointerException 我已经在平等模式和身份模式下进行了测试 在相等模式下,除非先前将事实新字符串(“myString”)插入工作内存,否则它将失败 这是虫子吗?我如何避免它 谢谢,萨维里奥我不知

我在运行规则时收到一个
NullPointerException
;我简化了DRL文件以重现问题

以下是我的版本:

  • 基尤版本:7.53.0.1最终版本
  • jboss/business central workbench showcase:最新版本
当我触发此规则时,Drools抛出一个
NullPointerException

我已经在平等模式和身份模式下进行了测试

在相等模式下,除非先前将事实
新字符串(“myString”)
插入工作内存,否则它将失败

这是虫子吗?我如何避免它


谢谢,萨维里奥我不知道你在你的规则里想做什么

retract
操作旨在从工作记忆中删除一个事实。在代码中,您试图删除工作内存中不存在的内容

这里有一个简单的例子来说明这是如何工作的。让我们假设我们有一些规则,这些规则为具有某些属性的名为
MyFact
的对象设置关键帧。所以我们有一些规则是这样的:

rule "Example rule 1"
when
  MyFact( value == "foo" )
then
  // do something for 'foo'
end

rule "Example rule 2"
when
  MyFact( value == "bar" )
then
  // do something for 'bar'
end
现在,只要我们在工作内存中有一个
MyFact
实例,就会对这些规则进行评估。所以为了防止这些规则被触发,我们可以收回事实——但我们必须收回实例

缩回示例:

rule "Retract fact when value is 'abc'"
when
  $f: MyFact( value == "abc" ) // $f is the instance
then
  retract($f)
end
我们没有收回任意数据——我们收回了我们想要收回的特定事实实例

如果我试图收回工作内存中没有的东西,那么NullPointerException完全有意义。您无法收回不存在的内容,因此当Drools引擎无法找到您请求的内容时,它会抛出异常

rule "Retract fact when value is 'abc'"
when
  $f: MyFact( value == "abc" ) // $f is the instance
then
  retract($f)
end