Nashorn 无法执行 MATH 函数

Nashorn fails to execute MATH function

我在 java 中使用 Nashorn 脚本引擎来计算表达式,

以下 log 的代码有效,

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("noshorn");
engine.eval("Math.log(99);");

log10 失败,

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("noshorn");
engine.eval("Math.log10(99);");

它抛出一个异常说,

Caused by: <eval>:1 TypeError: Cannot call undefined

如何解决this.Please求助

默认初始化的Math不是java系统Math。如果你想要 java 的数学,请使用:

var JavaMath = Java.type("java.lang.Math");

然后你就可以使用所有的数学方法了。我很惊讶 Nashorn 没有提供 javascript Math Object,它有 log10.

Nashorns current Math implementation is based on this version 的标准尚未包含 Math.log10.

@matt 已经给出了一个解决方法(+1),这里是另一个

engine.eval("java.lang.Math.log10(99);");

Math.log10 来自 ECMAScript6 -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10 , http://www.ecma-international.org/ecma-262/6.0/#sec-math.log10

从 jdk8u 开始,Nashorn 实现了 ECMAScript 5.1。 (少数) ES6 的元素被添加到 jdk9.