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.
我在 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.