В вашем правиле есть несколько проблем, о чем свидетельствует ошибка.
Ошибка компиляции правила finalValue не может быть разрешена в переменной
finalValue не может быть разрешена в переменной
Первая проблема заключается в том, что вы никогда не объявляете finalValue
, просто пытаетесь присвоить его с правой стороны. Чтобы это исправить, просто объявите finalValue. Предполагая, что это целое число:
int finalValue = ...
Это идентично тому, как это работает в Java.
Однако, учитывая, как выглядит оригинальное правило, я думаю, что вы пытаетесь вытянуть начальное значение из тестового объекта. Чтобы сделать это, вы должны сделать что-то вроде этого:
rule "Calculate"
when
Test( calculate == true,
$initialValue: initialValue ) // assign the $initialValue variable
then
int finalValue = $initialValue + 10; // set finalValue by adding 10 to $initialValue
Невозможно сделать stati c ссылку на нестатический c метод getInitialValue () из типа Test
Невозможно сделать статическую c ссылку на нестатический c метод getFinalValue () из типа Test
Обе эти ошибки указывают на то, что вы пытаетесь вызвать методы экземпляра без экземпляра объекта. Это снова то же самое, что и в Java, где, если у вас есть метод экземпляра, вы должны вызывать его для экземпляра.
Предполагая, что это методы класса Test
, вы изменили бы свое правило на быть:
package com.sample.rules
import com.sample.rules.Test
rule "Calculate"
when
$test : Test( calculate == true,
$initialValue: initialValue )
then
int finalValue = $initialValue + 10;
$test.setFinalValue(finalValue); // call against $test instance
System.out.println("FinalValue=" + $test.getFinalValue()); // you were also missing a parenthesis
end