《Drools7.0.0.Final规则引擎教程》第4章 Function函数详解编程语言

Function函数

首先来看一下function函数的语法结构图:
这里写图片描述

函数是将语义代码放置在规则文件中的一种方式,就相当于java类中的方法一样。函数并不会比辅助类做更多的事情,实际上,编译器会在幕后生成助手类。使用函数的好处是可以将业务逻辑集中放置在一个地方,根据需要可以对函数进行修改。但它既有好处也有坏处。函数对于调用规则的后果部分操作是最有用处的,特别是只有参数变化但执行的操作完全相同时。这里的函数可以对照java中方法的抽取封装来理解。

典型的函数声明如下所示:

function String hello(String name) { return "Hello "+name+"!"; 
}

实例规则代码如下:

package com.rules 
 
function String hello(String name){ return "Hello " + name + "!"; 
} 
 
rule helloSomeone 
 
    agenda-group "function-group" 
 
    when 
        eval(true); then 
        System.out.println(hello("Tom")); end

测试代码如下:

@Test public void testFunction(){ 
        KieSession kieSession = this.getKieSession("function-group"); int count = kieSession.fireAllRules(); 
        kieSession.dispose(); 
        System.out.println("Fire " + count + " rule(s)!"); 
    }

执行结果:

Hello Tom! Fire 1 rule(s)!

需要注意的是,function虽然不是java的一部分,但是依然可以在这里使用。函数的参数根据需要可以有一个,也可以有多个,也可以没有。返回结果的类型定义和正常的java语法没有区别。

前面我们已经讲过如何引入java中的静态方法,此处的function也可以用静态方法来代替,具体使用参考相关章节,这里就不再赘述。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15186.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论