gpt4 book ai didi

java - 如何在 JEXL 中连接字符串和表达式

转载 作者:行者123 更新时间:2023-11-30 03:23:03 56 4
gpt4 key购买 nike

我正在使用 JEXL http://commons.apache.org/proper/commons-jexl/评估字符串。

我尝试了以下代码

        String jexlExp = "'some text ' + output?'true':'false'";
JexlEngine jexl = new JexlEngine();
Expression e = jexl.createExpression(jexlExp);

JexlContext jc = new MapContext();
jc.set("output", false);

Object x = e.evaluate(jc);
System.out.println(x);

它正在将表达式计算为错误的结果。当我尝试连接两个字符串时,效果很好。当我尝试连接字符串和表达式时它不起作用。

那么,如何在 JEXL 中连接字符串和表达式?

最佳答案

JEXL 似乎正在执行 'some text' 的串联和output三元运算符 ?: 之前已执行。

用你原来的表达,'some text ' + output?'true':'false' ,我得到的输出为 true 。我不完全确定为什么'some text ' + false产量true ,但必须有某种隐式转换为 boolean在这里进行。

使用 'some text ' + output 删除三元运算符,我得到some text false .

在原始表达式中放置括号以明确表达正在发生的情况,我可以复制 true 的输出表达式 ('some text ' + output)?'true':'false' .

在三元运算符两边加上括号,我可以让三元运算符先运算并得到输出 some text false表达式 'some text ' + (output?'true':'false') .

发生这种情况是因为三元运算符 ?:优先级低于 + JEXL 中的运算符,与 Java 的运算符优先级匹配。在适当的位置添加括号强制执行 ?:运算符优先。

关于java - 如何在 JEXL 中连接字符串和表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878628/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com