2016-04-21 113 views

回答

4

如果要使用當前的JVM進程,請使用JVM的ScriptEngine

import javax.script.ScriptEngineManager 

val engine = new ScriptEngineManager().getEngineByMimeType("text/javascript") 
val result = engine.eval("1 + 1") 
println(result) 

這使用犀牛爲JDK 7和犀牛爲JDK 8.

Java代碼和犀牛是相當無縫之間的相互作用。


如果要使用新進程,請將ProcessBuilder與外部JS運行時一起使用。

import java.io.ByteArrayInputStream 

val input = new ByteArrayInputStream("console.log(1 + 1)".getBytes) 
val result = ("node" <# input).!! 
println(result) 

這會給你或許最快的執行,如果JS的CPU使用率很高。它也允許JS使用Node.js API,但它需要安裝Node.js。


如果你想(如果你使用Scala.js即)使用當前的JS過程,

import scala.scalajs.js 

val result = js.eval("1 + 1") 
println(result) 
+0

偉大的答案!謝謝! – Dyin

+0

關於第二個示例,要使其工作,它應該: 1)import scala.sys.process._ 2)將輸入重定向方法修復爲「#<」 – AlexY