Drools的Mvel方言是什么?

tec*_*504 7 drools mvel

我是Drools的新手.我正在创建一个规则,但我得到一个编译时错误

"字段不可见".

我试图用Jboss示例检查,他们使用方言"mvel".它汇编了.我不懂方言.那是什么dialect=mvel?

Stu*_*tLC 12

mvel或MVFLEX表达式语言 具有丰富的语法,其中的许多允许比更简洁和表现的代码(以下必要)java,例如

  • 以替代样式语法访问的get()ters/set()ters的简写(例如封装私有字段)property(类似于.Net中的VB或C#属性)

即.代替

myObject.setSomeField("SomeValue");
int x = myObject.getSomeIntField();
Run Code Online (Sandbox Code Playgroud)

您可以使用语法(请注意细微的大小写切换):

myObject.someField = "SomeValue"
x = myObject.someIntField // Type inferrence
Run Code Online (Sandbox Code Playgroud)
  • 该return语句是可选的(在Scala等许多函数语言中都有一个约定),分号也是如此,除非每行有多个语句:

x  // i.e. return x;
Run Code Online (Sandbox Code Playgroud)
  • 由序数创建和索引的速记数组

foos = {2, 4, 6, 8, 10}
foos[3] // foos.get(3)
Run Code Online (Sandbox Code Playgroud)
  • 类似地图(字典)

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.
Run Code Online (Sandbox Code Playgroud)
  • Null安全导航操作符(如Rosyln中的空条件运算符)

foo.?bar.baz // if (foo.bar != null) { return foo.bar.baz; } else { return null; }
Run Code Online (Sandbox Code Playgroud)


gad*_*don 5

基于

Drools JBoss 规则 5.0 开发人员指南

方言用于指定条件或结果中的任何代码表达式的语法。默认值是 Java。Drools 目前支持另一种方言,称为 mvel。

具体而言,mvel 是一种用于基于 Java 的应用程序的表达式语言。它基于 Java 语法。有关 mvel 的更多信息


tec*_*504 -1

我发现了一些关于这个的东西。我与那个分享。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
Run Code Online (Sandbox Code Playgroud)

我们需要检查如果序列==1则值为-1。序列值被设置为斐波那契对象。我们基于MVEL或java检查值。MVEL是Java的超集。