[英]Java: Library for expression parsing & evaluation with identifiers not known in advance
我需要评估一个布尔表达式。 目的是过滤一组带标签的项目 。 标记可以是任何名称(例如Java标识符)。
例如:
foo OR (bar AND !baz)
对于标记为:
我事先不知道需要哪个名字。 我已经检查了JEXL,但是它具有JexlContext ,它基本上是一个Map,需要在评估之前进行填充。
我需要一些库,该库调用回调函数来确定标识符是true还是false。 或任何其他允许标识符在评估之前未知的机制。
它必须像啤酒一样免费(用于Maven插件),因此Jep毫无疑问。
我可以使用什么?
您可以提供不依赖于Map
的JexlContext
实现。 无需在评估之前填充它,您可以对待它的has
进行检查, get
为您的回调并忽略set
的调用。
在Google的番石榴中尝试谓词
最简单的方法是使用自Java 6以来属于JDK的JavaScript。这是一个示例
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
// populate variables foo, bar and baz to the engine, e.g.
engine.put("foo", true);
engine.put("bar", true);
engine.put("baz", false);
engine.eval("foo OR (bar AND !baz)");
有关更多信息,请查看Oracle的教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.