2016-03-31 16 views
0

sadece meraktan dolayı Drools'un ekinde çok basit bir kural yazmayı deniyorum. (Çok olgun bir şey olmadığını biliyorum, ama yine de ...) Ama $ firstNum ve $ $ hatalarını alıyorum secondNum bir değişkene atanamaz. Bana yardım et ...Drools'taki ek program

rule "Addition rule" 
    when 
     act : CalcOperation(CalcOperation.ADD, $firstNum : firstNum, $secondNum : secondNum) 
    then 
     $out : $firstNum + $secondNum;; 
     //logger.info("Result of addition is : "+$out); 
end 

............................................................................... 

Here is the CalcOperation class. 

public class CalcOperation { 
    Double firstNum; 
    Double secondNum; 
    public static Boolean ADD; 
    public static Boolean SUB; 
    public static Boolean MUL; 
    public static Boolean DIV; 

    public CalcOperation(Boolean operation, Double m, Double n){ 
     this.firstNum = m; 
     this.secondNum = n; 
    } 

cevap

0

Java'ya daha fazla ve daha çok Drools belgelerine girmeniz gerekecek.

Statik değişken, kullanmakta olduğunuz bağlamda kullanışlı değildir. Ekleme, çıkarma vb. Için ayrı nesneler istiyorsanız, Operasyon alt sınıfını kullanabilirsiniz. Örnek değişkenler özel olmalı ve en azından bir alıcıya sahip olmalıdır. Kural olarak, uygun bir alıcı (veya herkese açık değil) olması durumunda bir değişkene ($firstNum vb.) Bir alana bağlanamazsınız.

Bu bölüm ya da sonuç Java'da yazılmalıdır. $out : $firstNum + $secondNum;;, geçerli bir Java bildirimi olan değil'dir. İşte

bir Java sınıfı var:

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; } 
    //... 
} 

Ve burada kuralı:

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