3

我正在尝试直接从命名空间初始化 Oracle 的 javascript nashorn 引擎jdk.nashorn.*。(nashorn 库是 2013 Jan 的 beta 版本)。

有一个使用 javax.script.ScriptEngineManager 实用程序类调用引擎的 Nashorn 引擎实例的 Web 示例。

var engine = ScriptEngineManager.getEngineByName(*)

但是,我喜欢远离 ScriptEngineManager,所以我需要像 Rhino 一样直接调用引擎。

Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();

如何直接创建 nashorn 引擎实例?

4

2 回答 2

3

javax script engine by type application/javascript Hashorn,取回一个脚本引擎并告诉它做事,它还提供可调用和可编译的接口。

Yout 可能有兴趣阅读以下内容:如何开始使用 Oracle 的 Nashorn JS 引擎进行编码,它何时会取代 OpenJDK 中的 Rhino?

示例用法:

import javax.*; //lib imports
// we should use the javax.script API for Nahsorn
ScriptEngineManager m = new ScripteEngineManager(); 
ScriptEngine e = m.getEngineByname("nashorn");
try {
   e.eval("print('hello nashorn !')");
} catch(Exception e) {
  // using jdk lower then version 8 maybe ?
}
于 2013-03-23T09:52:04.010 回答
1

我找到了直接使用.NET初始化引擎的方法,没有“

    "javax.script.ScriptEngineManager"

环境:IKVM.NET 版本 8 + .NET Framework 4.52

    static void Main(string[] args)
    {

        jdk.nashorn.api.scripting.NashornScriptEngineFactory fact = new jdk.nashorn.api.scripting.NashornScriptEngineFactory();
        jdk.nashorn.api.scripting.NashornScriptEngine nashornengine = fact.getScriptEngine() as jdk.nashorn.api.scripting.NashornScriptEngine;

        nashornengine.eval("var x = 1/3;");
        object result = nashornengine.get("x");
        Console.WriteLine("{0}", result);
    }

这让我可以更直接地与 nashorn 上下文方法进行交互。

 compile()
 getFactory()
 invokeMethod()
 invokeFunction()
于 2014-05-27T06:42:11.890 回答