1

这里有 3 个 INT 参数:a、b、c。和 1 个字符串参数:d。这是Java中的代码:

if (a>1) return c+d;
if (b<2) return c-d;
if (d.equals("123") return c*d;
return c+1;

如何将上述代码转换为 Jexl?我尝试了很多次,包括使用 var。但它总是返回null。

4

1 回答 1

2

可能您使用 JEXL 表达式而不是脚本。您只能在表达式中使用三元条件。if-else、return、for、while 应该在脚本中使用:

JexlEngine jexl = new JexlBuilder().create();
JexlScript script = jexl.createScript(scriptText);
result = script.execute(context);

http://commons.apache.org/proper/commons-jexl/reference/syntax.html

来自 javadoc:

表达式不同于脚本——它只是对单个表达式的引用,而不是对多个语句的引用。这意味着表达式中不允许使用 'if'、'for'、'while'、'var' 和块 '{'... '}'。

脚本是使用给定的一组 JexlContext 变量执行的一些有效的 JEXL 语法。脚本是一组语句,以分号分隔。语句可以是块(包含代码的大括号)、控制语句(例如 if 和 while)以及表达式和赋值语句。

于 2017-01-11T17:59:35.967 回答