
title: Aviator
date: 2019-02-17
categories:
- 框架
toc: true
tags:
- 表达式引擎
- 节点路由
description: 最近遇到节点路由的需求,调研了一下,采用 Aviator 解决,记录一下.
本文均为摘录
github 地址
https://github.com/killme2008/aviator
具体文档地址
https://github.com/killme2008/aviator/wiki
依赖
1 |
<dependency> |
使用变量
1 |
Map<String, Object> env = new HashMap<String, Object>(); |
调用函数(内置函数)
1 |
Aviator 支持函数调用, 函数调用的风格类似 lua |
lambda函数定义
aviator 支持通过 lambda 关键字定义一个匿名函数,并且支持闭包捕获
匿名函数的基本定义形式是
1 |
lambda (参数1,参数2...) -> 参数体表达式 end |
1 |
AviatorEvaluator.exec("(lambda (x,y) -> x + y end)(x,y)", 1, 2); |
自定义函数
Aviator 除了内置的函数之外,还允许用户自定义函数,只要实现com.googlecode.aviator.runtime.type.AviatorFunction接口, 并注册到AviatorEvaluator即可使用. AviatorFunction接口十分庞大, 通常来说你并不需要实现所有的方法, 只要根据你的方法的参 数个数, 继承AbstractFunction类并override相应方法即可。
编译表达式
1 |
public class TestAviator { |
访问数组和集合
可以通过中括号去访问数组和java.util.List对象, 可以通过map.key访问java.util.Map中key对应的value
nil 对象
日期比较
不支持
强大的 seq 库
aviator 拥有强大的操作集合和数组的 seq 库。整个库风格类似函数式编程中的高阶函数。在 aviator 中, 数组以及java.util.Collection下的子类都称为seq,可以直接利用 seq 库进行遍历、过滤和聚合等操作。




近期评论