心飞扬

dialect设置规则当中要使用的语言类型 ,默认除了java还有mevl。本文简单介绍mvel。
mvel是一种嵌入式脚本语言,在规则文件上可以用这种语言建立他们的断言、返回值、Eval和推论。mvel分解析模式(Interpreted Mode)和编译模式(Compiled Mode)


mvel语法:
表示对象的属性

user.name 相当于java代码 user.getName()
user.manager.name 相当于java代码 user.getManager().getName()
比较
user.name == 'John Doe'
(user.name == 'John Doe') && ((x * 2) - 1) > 20


返回值
a = 10;
b = (a = a * 2) + 10; 相当于java代码 a=10; a= a*2; b= a + 10;
return a;


数组和list访问:user[5] 相当于java代码 user.get(5);
Map访问:user["foobar"] 相当于java代码 user.get("foobar")


创建对象:
new String("foo")


对一个对象,多个属性赋值
with (user = new User()) {
name = "John Doe",
age = 28,
sex = Sex.MALE,
admin = true
}


脚本:
note:
语法跟一些函数语言或脚本语言差不多,如scala


调用某些方法
String test = "Hello";
Object result = MVEL.eval("toUpperCase()", test);


获取pojo的属性值
User user = new User();
user.setName("Bob");
user.setPassword("Despot");
user.setAge(30);


String name = (String) MVEL.eval("name", user);


比较
public class Person {
private String name;
public void setName(String name) { this.name = name; }
public String getName() { return this.name; }
}


Person
personInst = new Person();
personInst.setName("Mr. Foo");


Object result = MVEL.eval("name == 'Mr. Foo' ", personInst);


赋值
Map vars = new HashMap();
vars.put("x", new Integer(5));
vars.put("y", new Integer(10));


Integer result = (Integer) MVEL.eval("x * y", vars);
相当于java代码 Integer result = (Integer)vars.get("x") * (Integer)vars.get(" y ")
assert result.intValue() == 50; // Mind the JDK 1.4 compatible code :)


规则文件使用mvel示例


示例1:
package com.demo.mvel


import com.demo.*


rule "rule1"
dialect "mvel"
when
#设是规则引擎语法
$a : Applicant( age < 18 )
then
#mvel 语法
$a.valid = false;
end


示例2:
package com.demo.mvel


import com.demo.*
import java.util.List;


rule "rule1"
salience 2
dialect "java"
when
eval(true);
then
Applicant app = new Applicant("依晨",20);
insert(app);
end


rule "rule2"
salience 1
dialect "mvel"
#no-loop true 不会循环
when
$app:Applicant(name == "依晨",age<30)
then
#update方法2
#$app.age + 1是mvel语法
Applicant app = new Applicant("依晨",$app.age + 1);
update(drools.getWorkingMemory().getFactHandleByIdentity($app),app);

#update方法1
#$app.setAge($app.getAge() + 1);
#update($app);
System.out.println("------" + $app.name+"("+ $app.age + ")");
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值