表达式引擎 Aviator 发布 4.0.0,支持 lambda 和多实例等

栏目: 软件资讯 · 发布时间: 6年前

内容简介:Aviator是一个轻量级、高性能的Java表达式执行引擎,它动态地将表达式编译成字节码并运行。可被用于动态的公式计算、规则执行和过滤等场景。 本次发布是一个大版本升级,主要改进如下: 多行表达式支持,以分号;...

Aviator是一个轻量级、高性能的 Java 表达式执行引擎,它动态地将表达式编译成字节码并运行。可被用于动态的公式计算、规则执行和过滤等场景。

本次发布是一个大版本升级,主要改进如下:

  • 多行表达式支持,以分号;隔开的多个表达式,求值结果将是最后一个表达式的值。

  • 支持 lambda 定义匿名函数,支持闭包捕获。自定义函数可以通过 lambda,举例如下

    AviatorEvaluator.defineFunction("s",
            "lambda(x) -> lambda(y) -> lambda(z) -> x + y + z end end end");
    AviatorEvaluator.exec("println(s(4)(5)(6))");

    filtermap等高阶函数也支持使用 lambda 替代原有的谓词函数:

    Map<String, Object> env = ...
    int [] a = ...
    env.put("a", a);
    AviatorEvaluator.execute("map(a, lambda(x) -> x + 1 end))");
  • 新增两个选项

    • ENABLE_PROPERTY_SYNTAX_SUGAR,是否启用属性访问的语法糖,例如 a.b.c 的变量访问是否走 commons-beanutils 反射访问,默认启用为 true。禁用后,这类变量将直接从 env 获取。

    • NIL_WHEN_PROPERTY_NOT_FOUND,当启用属性语法糖的时候,如果调用反射失败,默认行为是抛出异常,通过启用这个选项,将直接返回 null,忽略异常。

  • 支持求值器多实例,可以通过 AviatorEvaluator.newInstance() 创建求值器实例 AviatorEvaluatorInstance,不同求值器之间的选项、自定义函数等不共享。原有的 AviatorEvaluator只是一个全局静态实例。

  • 修复字符串类型转义符支持。

  • 新增 FunctionLoader 接口用于自定义函数加载

    public interface FunctionLoader {
      public AviatorFunction onFunctionNotFound(String name);
    }

     可以添加自定义函数加载器到求值器实例 AviatorEvaluator.addFunctionLoader(loader)。默认新增提供了一个 SringContextFunctionLoader,可用于从 spring 容器加载自定义函数。

  • seq.filter 函数现在支持 Map 类型集合的迭代过滤。

  • seq 的谓词函数都支持第三个参数,用于做属性过滤,参见测试用例

  • 新增两个内置的特殊变量:

    • #__env__ 表示运行环境的 env 上下文。

    • #__instance__ 表示当前运行的求值器 AviatorEvaluatorInstance实例。

  • 新增函数 boolean(v),可将其他类型的值转成布尔类型,除了 nil/false之外,其他值都将为 true。

  • Opitons.TRACE_EVAL跟踪运行,支持函数调用跟踪。

  • 语法错误信息改进,标记错误的表达式位置。

兼容性问题

  • 如果现有自定义函数名是 lambda,将无法正常使用,请使用其他名字。

更多信息请参考主页


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《表达式引擎 Aviator 发布 4.0.0,支持 lambda 和多实例等》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming in Haskell

Programming in Haskell

Graham Hutton / Cambridge University Press / 2007-1-18 / GBP 34.99

Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduc......一起来看看 《Programming in Haskell》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具