我试图从Java/Nashorn调用Javascript中的函数(在Scala中,但这不是问题的实质)。
// JS
var foo = function(calculator){ // calculator is a Scala object
return this.num * calculator.calcMult();
}
case class Thing(
num: Int,
stuff: String
)
case class Worker() { // Scala object to bind to calculator
def calMult() = { 3 } // presumably some complex computation here
}
我首先让foo进入JS环境:
jsengine.eval("""var foo = function(calculator){return this.num * calculator.calcMult();}"""
要使用它,我需要两件事:1)“this”上下文将填充我的Thing对象,2)能够将Java/Scala对象传递给JS函数(稍后调用calcMulti)。
(如果需要,我可以轻松地JSON序列化东西。)
如何做到这两个并成功地从Scala调用foo()?