我正在构建一个下面使用JEXL的计算器。我知道如何在Jexl中引入工作区,但这只允许类定义,我需要定义一个方法定义。在下面的示例中,为了访问Math的日志函数,我必须将其添加到函数上下文中。我希望能够计算一个表达式:"log(5)“,即不使用限定符。
Map<String, Object> funcs = new HashMap<String, Object>();
funcs.put("math", Math.class);
JexlEngine jexl = new JexlBuilder().namespaces(funcs).create();
JexlExpression je = jexl.createExpression("math:log(5)");
je.evaluate();发布于 2019-06-17 22:58:52
如果Math是函数的唯一源,则可以使用“null”命名空间。
Map<String, Object> funcs = new HashMap<String, Object>();
funcs.put(null, Math.class);
JexlEngine jexl = new JexlBuilder().namespaces(funcs).create();
JexlExpression je = jexl.createExpression("log(5)");
Object result = je.evaluate(null);
Assert.assertNotNull(result);如果您需要的不仅仅是Math作为源,我恐怕您必须创建自己的类,将每个方法委托给它的源。
https://stackoverflow.com/questions/56578368
复制相似问题