我使用rhino来计算js表达式,方法是将所有可能的变量值放入作用域并计算匿名函数。但是,表达式非常简单,为了提高性能,我只想在表达式中使用值。
代码示例:
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
// Build javascript anonymous function
String script = "(function () {" ;
for (String key : values.keySet()) {
ScriptableObject.putProperty(scope, key, values.get(key));
}
script += "return " + expression + ";})();";
Object result = cx.evaluateString(scope, script, "<cmd>", 1, null);
我想从变量名的表达式中获取所有标记。
例如,如果表达式
(V1ND < 0 ? Math.abs(V1ND) : 0)
它会回来的 V1ND
.
1条答案
按热度按时间xuo3flqw1#
rhino 1.7 r3引入了一个ast包,可用于查找名称:
输出:
但是,我不确定这对提高效率有多大帮助,除非表达式适合缓存。您将对代码进行两次解析,如果需要消除变量的歧义
abs
从函数开始Math
需要进一步检查。