我是 Drools 的新手。我正在创建规则,但出现编译时错误
“字段不可见”。
我尝试检查 Jboss 示例,他们使用方言 "mvel"。它编译。我不明白方言。那么是什么dialect=mvel
?
mvel
, 或MVFLEX 表达式语言 具有丰富的语法, 其中许多允许比 , 更简洁和富有表现力的代码 (和更少的命令) java
, 例如
get()
/ set()
ters(例如封装私有字段)的简写,以另一种property
样式语法访问(类似于.Net 中的 VB 或 C# 属性)IE。代替
myObject.setSomeField("SomeValue");
int x = myObject.getSomeIntField();
您可以使用语法(也请注意微妙的大写开关):
myObject.someField = "SomeValue"
x = myObject.someIntField // Type inferrence
return
语句是可选的(在 Scala 等许多函数式语言中都有这种约定),分号也是如此,除非每行有多个语句:x // i.e. return x;
foos = {2, 4, 6, 8, 10}
foos[3] // foos.get(3)
bars = ["a" : "Apple", "b" : "Basket"] // Hashmap, with put
bars["a"]
bars.a // Similar to dynamically typed object e.g. in javascript, if key is a string.
foo.?bar.baz // if (foo.bar != null) { return foo.bar.baz; } else { return null; }
基于
Drools JBoss Rules 5.0 开发者指南
方言用于指定条件或结果中的任何代码表达式中的语法。默认值为 Java。Drools 目前支持另一种称为 mvel 的方言。
具体来说,mvel 是一种用于基于 Java 的应用程序的表达式语言。它基于 Java 语法。有关 mvel 的更多信息
rule "validate holiday"
dialect "mvel"
dialect "java"
when
$h1 : Holiday( month == "july" )
then
System.out.println($h1.name + ":" + $h1.month);
end
方言“mvel”的目的是指向普通旧 Java 对象 (POJO) 类的变量的 Getter 和 Setter。考虑上面的示例,其中使用了 Holiday 类,并且在圆括号(括号)内使用了“月”。因此,借助方言“mvel”,可以访问变量“month”的 getter 和 setter。
方言“java”用于帮助我们在规则中编写 Java 代码。对此有一个限制或特征。我们不能在规则的“when”部分使用 Java 代码,但可以在“then”部分使用 Java 代码。
我们也可以声明一个不带 $ 符号的引用变量 $h1。对此没有任何限制。变量前加$符号的主要目的是为了标记POJO类的变量和Rules的区别。
问候。
如果您使用方言 mvel - 将修复您的错误。否则,该变量的范围默认是私有的,所以使用默认的 getter。获取字段()。将“字段”替换为 yoru 字段名。
您可以在 Business Central 的 Data Objects -> class -> source 选项卡中查看该类的源代码。
我发现了一些关于这个的东西。我与那个分享了。Drools 支持 Java 或 MVEL 脚本语言。获取对象属性值。例如,斐波那契有 bean 并具有多个属性,即序列
rule Recurse
salience 10
when
not ( Fibonacci ( sequence == 1 ) )
f : Fibonacci ( value == -1 )
then
insert( new Fibonacci( f.sequence - 1 ) );
System.out.println( "recurse for " + f.sequence ); end
我们需要检查 if sequence ==1 then value is -1 .The sequence values are setting into Fibonacci object.We are check the values based on MVEL or java.MVEL is an superset of Java。