首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drools函数

Drools函数
EN

Stack Overflow用户
提问于 2012-09-26 23:03:16
回答 4查看 18.3K关注 0票数 8

最近我正在使用drools,我想对一些对象进行一些特殊的检查。我需要在规则的when部分使用函数,但是我得到了一个错误。示例:

代码语言:javascript
复制
function boolean newFunction(int a){
  if(a>0)
    return true;
  else
    return false;
}

rule "new rule"
salience 100
dialect "mvel"
when
  eval(newFunction(1))
then
  System.out.println("OK");
end

我得到的错误总是:

代码语言:javascript
复制
unable to resolve method using strict-mode: java.lang.Object.newFunction(java.lang.Integer)

when部分中的函数不支持drools吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-26 23:44:49

简短的答案是:不。

这是因为事实需要在工作记忆中。

您可以做的是,有一个规则,它从工作内存中获取某个类的所有类型,在then部分中应用一个函数,并在工作内存中插入新的值。

编辑

这个答案最初是在2012年发布的,并不是很相关,因为更新版本的drools确实支持when子句上的函数。

票数 11
EN

Stack Overflow用户

发布于 2014-12-24 01:22:28

MVEL或集成bug -函数调用适配器很可能没有装箱/取消装箱原始类型。我看到这个问题很老了,但是这个问题已经被修复了(用6.3.0-SNAPSHOT进行了测试)。对于旧版本,我会尝试使用盒装类型: function boolean newFunction( Integer A) ...

票数 3
EN

Stack Overflow用户

发布于 2015-02-04 03:40:24

根据上面选择的答案,经过一些实验,我发现可以创建一个外部java方法,它的类可以导入到规则文件中,并封装在MVEL函数包装器(Boolean)中,然后可以将其作为eval语句的参数从LHS调用。

代码语言:javascript
复制
[External Java POJO_Class.myMethod]


import com.mypackage.POJO_Class;


function Boolean myFunctionName() {
   POJO_Class myClass = new POJO_Class();
   return myClass.myMethod(Parameters);
}



rule "Test Rule"
    when
      eval ( myFunctionName(parameters) )
    then
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12604741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档