十三 . 表达式计算 OGNL 第4章. 表达式

如果你在一个 OGNL 表达式之后带上一个括号表达式, 而且在括号之前没有点号, 则 OGNL 将试图把第一个表达式的结果作为另一个表达式来进行计算, 并将把括号表达式的结果用作这次计算的根对象. 第一个表达式的结果可以是任意类型的对象, 如果它是一个AST , OGNL 将假定它是一个表达式被解析之后的形式, 并简单地解释执行它; 否则, OGNL 将把这个对象转换为字符串形式, 然后解析这个字符串, 最后解释执行这个解析结果.

例如, 下面的表达式

#fact(30H)

首先将查找fact变量, 并把它的值作为一个 OGNL 表达式来解释执行, 执行时将使用BigInteger30 作为这个表达式的根对象??. 后面的章节将给出一个例子, 首先我们给fact变量赋值为一个表达式, 这个表达式将返回它收到的参数的阶乘. 注意, 因为难以将这种双重计算操作符与方法调用区分开, 就导致了一个OGNL语法歧义. OGNL 解决这个语法歧义的方法是, 将一切貌似方法调用的语句都作为方法调用来处理. 比如, 如果当前对象中存在一个fact属性, 它的值是一个进行阶乘运算的OGNL表达式, 你不能通过下面这种方法来调用它:

fact(30H)

因为 OGNL 将把这个表达式解释为对fact方法的一个调用. 你可以给属性引用加上括号, 来强制 OGNL 按照你希望的方式来解释这个语句:

(fact)(30H)

转载于:https://www.cnblogs.com/xuedexin/articles/5661825.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值