Я пытаюсь вызвать функцию в Javascript из Java / Nashorn (в Scala, но это не существенно для вопроса).
// JS
var foo = function(calculator){ // calculator is a Scala object
return this.num * calculator.calcMult();
}
Контекст на стороне Scala выглядит следующим образом:
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-сериализовать Thing.)
Как я могу сделать оба и успешно вызвать foo () из Scala?