Drools的新增计划

时间:2016-03-31 07:30:11

标签: drools

出于好奇,我试图在Drools中写一个非常简单的规则。(我知道它不是一个非常成熟的东西,但仍然......)     但是得到$ firstNum和$ secondNum的错误无法分配给变量。帮助我...

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    // get PATH using pipe
    FILE* pip = popen("exec bash -c 'echo $PATH'", "r");
    if (!pip)
    {
        printf("can not open pipe!");
        return 1;
    }

    char lineversion[600];
    memset (lineversion, 0, sizeof(lineversion));
    if (!fgets(lineversion, sizeof(lineversion), pip))
    {
        printf("fgets error!");
        return 1;
    }

    std::cout << lineversion << std::endl;

    // get PATH using getenv
    char* pPath = getenv ("PATH");
    std::cout << pPath << std::endl;
}

1 个答案:

答案 0 :(得分:0)

您需要更多地了解Java,以及Drools文档中的更多内容。

静态变量在您使用它的上下文中并不常用。如果你想要加法,减法等单独的对象,你可以子类化Operation。实例变量应该是私有的,至少有一个getter。

在规则中,您不能将变量($firstNum等)绑定到字段,除非它具有正确的getter(或者是公共的 - 不推荐)。

必须用Java编写then-part或后果。 $out : $firstNum + $secondNum;; 不是有效的Java语句。

这是一个Java类:

public enum Operator { ADD, SUB, MUL, DIV };

public class Operation {
    private double op1;
    private double op2;
    private Operator op;
    public Operation( Operator op, double op1, double op2 ){
        this.op = op;
        //...
    }
    public Operator getOp(){ return op; }
    //...
}

以下是规则:

rule "exec op"
when
    $op: Operation( $op: Operator.ADD, $op1: op1, $op2: op2 )
then
    System.out.writeln( "result: " + ($op1 + $op2) );
end