0

我需要评估一个布尔表达式。目的是过滤一组标记项目。标签可以是任何名称(比方说,像 Java 标识符)。

例如:

foo OR (bar AND !baz)

这对于标记的项目是正确的:

  • 费费
  • 富吧嘘
  • 酒吧

我事先不知道需要哪些名字。我检查了 JEXL 但它有JexlContext,它基本上是一个需要在评估之前填充的 Map。

我需要一些调用回调函数的库来决定标识符是真还是假。或任何其他允许标识符在评估之前未知的机制。

它必须像啤酒一样免费(它用于 Maven 插件),所以 Jep 是不可能的。

我可以使用什么?

4

3 回答 3

1

您可以提供一个JexlContext不依赖于Map. has您可以将其对,的检查视为回调,而不是在评估之前填充它get,并忽略对 . 的调用set

于 2011-12-12T18:34:00.583 回答
0

在谷歌的番石榴中尝试谓词

于 2011-12-12T18:33:23.117 回答
0

最简单的方法是使用自 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的教程。

于 2011-12-12T18:35:51.213 回答