3

名前空間から Oracle の JavaScript nashorn エンジンを直接初期化しようとしていjdk.nashorn.*ます。(nashorn ライブラリは 2013 Jan のベータ版です)。

javax.script.ScriptEngineManager ユーティリティ クラスを使用して、エンジンの Nashorn エンジン インスタンスを呼び出す Web サンプルがあります。

var engine = ScriptEngineManager.getEngineByName(*)

ただし、私は ScriptEngineManager を避けたいので、Rhino と同じ方法でエンジンを直接呼び出す必要があります。

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

nashorn エンジン インスタンスを直接作成するにはどうすればよいですか?

4

2 に答える 2

3

タイプ application/javascript Hashorn による javax スクリプト エンジン。スクリプト エンジンを取得し、実行するように指示します。呼び出し可能でコンパイル可能なインターフェイスも提供します。

これを読むことに興味があるかもしれません: Oracle の Nashorn JS Engine でコーディングを開始するにはどうすればよいですか? 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 に答える