第十一章 表达式引擎简介.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式引擎简介 为什么需要 EL 表达式引擎 你,对,就是你,正在看这篇⽂章的⼈,我虽然不认识你,但是 我可以负责任的说, 如果你看到这个 题就⼼⾥在悄悄的呼喊: “靠,他们连这个都有!我省事了,哇哈 哈哈和” 。 那么,你绝对属于百分之⼀的特例。 就是说,绝⼤多数⼈的绝⼤多数项 ⽬,是不需要 ⼀个嵌⼊式的表达式引擎的。因此,提供这个功能的⽬的就是: 满⾜ ⼩撮⼈的 ⼩撮要求 但是,⼀⼩撮⼈的⼀⼩撮要求有很多,作为⼀个⼩众类库,为什么单单打算⽀持 这个特性呢? 下⾯是我的理由: 这个功能是其它模块功能的基础,我们需要它 可能因此吸引其他的开发者对 Nutz 的兴趣 需要嵌⼊式表达式引擎的⼈是 Java 开发者的少数⼈,但是这些⼈也应该 ⽐ Nutz 的⽤户要多 这些⼈基本上编程⽔平要强⼀些 其他的提交者对增加这个特性没有特别强烈的反对 近 步介绍表达式引擎 那么它怎么使⽤呢? 是的,我想这可能会是你脑海⾥闪出的第⼀个问题。并且,我想你真正想问的是:“它 好⽤吗?” 如果你脑海⾥第⼀个问题不是这个,⽽是:“表达式引擎是神马东东?” 那么建议你不 ⽤阅读本⽂了, 反正你也⽤不着。等你需要的时候,再读也不迟,反正这篇⽂章又不 长。 ⽽关于 好⽤,还有下⾯这三层含义: 它容易使⽤吗? System.out.println(El.eval(3+4*5).equals(23)); // 将打印 true,够 表达式接受的是字符串输⼊,输出则是⼀个Object对象,⽽Object对象本⾝是根据计算 结果进⾏进⾏了⾃动封装的。 它功能强⼤吗? 虽然在 #⼀些表达式的例⼦ 这⼀节我有更详细的例⼦,但是这⾥我必须要先概括⼏ 点: 它⽀持变量,⽐如 Conte t conte t = Lang.conte t(); conte t.set(a, 10); System.out.println(El.eval(conte t, a*10)); // 将打印 100 通过 Context 接⼜,你可以为你的表达式随意设置变量的值。它⽀持如下类型的 Java 数据 整型 - int 或 Integer 浮点 - float 或 Float 长整 - long 或 Long 布尔 - boolean 或 oolean 字符串 - String 数组 - T[] 列表 - LstTi 集合 - CollectionT Map - MapString,? 普通 Java 对象 基本上,有了这些,你可以为所欲为了吧。 它速度怎么样? 我觉得它速度不怎么样。它的⼯作的原理是这样的,每次解析都经过如果下三步 1. 解析成后缀表达式形式的⼀个队列 2. 将后缀表达式解析成⼀棵运算树. 3. 对运算树的根结点进⾏运算. 当然我也提供了⼀个提升效率的⼿段,因为如果每次计算都经过这三个步骤当然慢, 所以我们可以对它先预编译: El e p = new El(a*10); // 预编译结果为⼀个 El 对象 Conte t conte t = Lang.conte t(); conte t.set(a, 10); System.out.println(e p.eval(conte t)); // 将打印 100 El在实例化时就会对表达式进⾏预编译,会直接编译成运算树,当调⽤eval⽅法时, 就不⽤再耗时的编译动作了. 它的 eval 函数是线程安全的,只要在多个线程内给它不同的 context 就是了。 当然, 你也可以在多个线程间共享同⼀个 Context ,那运⾏起来⼀定很有趣,不是吗? ⽀持什么样的操作符 我想但凡有机会和兴趣读到这篇⽂字的同学,⼀定是编程⽼⼿,即使是⾃称⼩⽩的的 同学们, 你们对⼀个编程语⾔应该⽀持的操作符基本都差不多熟的不⾏, 所以,我 就不在这⾥唠叨操作符的具体细节了,我只给⼀个列表,告诉你我现在⽀持什么操作 符。 另外,再加上⼀句: 只要⽀持的操作符,我会让它的优先级以及⾏为会和 Java 的表达式 致。如果你发 现不 致 别犹豫,给我报 Issue 吧。 权 符号 重 解释 () 100 括号,优先计算

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档