2014-05-08 14 views
0

在scala中運行nashorn時,我無法獲得Class進入ScriptEngine的範圍。如何在Scala中將類放入JJS ScriptEngine的範圍

這是我嘗試做:

import javax.script.{ScriptEngine, ScriptEngineManager} 
case class MyClass(id: Option[String], name: Option[String]) 

val manager: ScriptEngineManager = new ScriptEngineManager 

val engine: ScriptEngine = manager.getEngineByName("nashorn") 

var simpleScript: String = 
     """ 
     var myClass = new MyClass('myId', 'myName'); print(myClass.id); 
     """` 

engine.eval(simpleScript) 

有誰知道如何從JavaScript啓動MyClass

我得到以下異常:

javax.script.ScriptException: ReferenceError: "MyClass" is not defined in <eval> at line number 1` 
+0

會發生什麼如果你嘗試和完全限定你的自定義類(與包)在JavaScript中實例化它?另外,您的自定義類在其構造函數中使用了「Option」值,但在JavaScript中只傳遞了字符串。 – cmbaxter

+0

將'Option'改爲'String'沒有什麼區別。 如果它位於根目錄下,那麼將使用什麼默認包? – jonbros

回答

2

我會承擔其將是一樣試圖訪問Java類,它值得一試

http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/javascript.html#A1147187表明

var MyClass = Java.type("MyClass"); 
var inst = new MyClass("myId", "myName"); 
+0

我認爲這不是必要的,但試過了。不工作。 – jonbros

+0

看起來好像你不能在腳本中使用Scala類。我創建了一個Java類作爲解決方法。如果沒有更好的解決方案或解釋將在這裏給出,我會除了你的解決方案。謝謝! – jonbros