Aviator使用说明
所属分类 aviator
浏览量 776
数据类型
Number类型 数字类型 long,double,java.math.BigInteger(bigint) java.math.BigDecimal(decimal)
bigint 大写字母 N 结尾的整数
decimal 大写字母 M 结尾的数字
Long 整数
Double 浮点数
超过 long 范围的整数字面量 自动转换为 bigint 类型
String类型 字符串类型,单引号或者双引号括起来的文本串
Bool类型 常量true和false
Pattern类型 正则表达式, 以//括起来的字符串,如/\d+/,内部 实现为java.util.Pattern
变量类型
nil类型 常量nil 任何类型都大于nil ,传入的变量值如果为null,作为nil处理
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.function.AbstractVariadicFunction;
import com.googlecode.aviator.runtime.function.FunctionUtils;
import com.googlecode.aviator.runtime.type.AviatorDouble;
import com.googlecode.aviator.runtime.type.AviatorObject;
import com.googlecode.aviator.runtime.type.AviatorString;
import java.util.HashMap;
import java.util.Map;
public class AvDemo3 {
public static void main(String[] args) throws Exception {
Object execute = AviatorEvaluator.execute("1+2+3");
System.out.println(execute.toString() + execute.getClass());
Object execute1 = AviatorEvaluator.execute("0.3+1.0");
System.out.println(execute1.toString() + execute1.getClass());
Expression compile = AviatorEvaluator.getInstance().compile("println('Hello, AviatorScript'); 1+2");
Object res = compile.execute();
System.out.println(res.toString());
// 变量
Map env = new HashMap();
env.put("name", "dyyx");
String execute2 = (String) AviatorEvaluator.execute(" 'hello' + name", env);
System.out.println(execute2);
// 函数
Object execute3 = AviatorEvaluator.execute("string.length('hello')");
System.out.println(execute3.toString());
//lambda (参数1,参数2...) -> 参数体表达式 end
env.put("x", 1);
env.put("y", 2);
Object execute4 = AviatorEvaluator.execute("(lambda (x,y) -> x + y end)(x,y)", env);
System.out.println(execute4.toString());
//支持自定义函数
AviatorEvaluator.addFunction(new AddFunction());
AviatorEvaluator.addFunction(new GetFirstNonNullFunction());
env.put("a", 9);
env.put("b", 1);
// 自定义函数
System.out.println(AviatorEvaluator.execute("add(1,2)").toString());
// 可变参数
System.out.println(AviatorEvaluator.execute("getFirstNonNull(a,b,c)", env));
// lambda表达式 自定义函数
AviatorEvaluator.defineFunction("sub", "lambda (a,b) -> a - b end");
System.out.println(AviatorEvaluator.execute("sub(3,1)").toString());
}
static class AddFunction extends AbstractFunction {
@Override
public AviatorObject call(Map env, AviatorObject arg1, AviatorObject arg2) {
Number left = FunctionUtils.getNumberValue(arg1, env);
Number right = FunctionUtils.getNumberValue(arg2, env);
return new AviatorDouble(left.doubleValue() + right.doubleValue());
}
@Override
public String getName() {
return "add";
}
}
static class GetFirstNonNullFunction extends AbstractVariadicFunction {
@Override
public AviatorObject variadicCall(Map env, AviatorObject... args) {
if (args != null) {
for (AviatorObject arg : args) {
if (arg.getValue(env) != null) {
return arg;
}
}
}
return new AviatorString(null);
}
@Override
public String getName() {
return "getFirstNonNull";
}
}
}
https://gitee.com/dyyx/hellocode/blob/master/demo/aviatordemo/src/main/java/dyyx/AvDemo3.java
上一篇
下一篇
MybatisPlus QueryWrapper LambdaQueryWrapper LambdaQueryChainWrapper
mybatis plus 常用注解
mybatis 日志实现要点
Java注解实例
idea 设置异常断点
经典粤语歌