В коде Scala я хотел бы создать интерпретатор, который будет оценивать некоторые строки, которые являются кодом Scala, например, с использованием ScriptEngine. Но я хотел бы передать ей текущую переменную и определения типов, чтобы код в строках мог их использовать, как если бы новый интерпретатор разветвлялся от текущего интерпретатора.
С ScriptEngine я мог бы использовать метод «put», чтобы поместить в него привязки, но это должно быть явным и для каждой переменной. И нет способа передать определение класса или метод и т.д.
Есть ли способ, или я что-то не понимаю?
Цель состоит в том, чтобы позволить динамическому коду использовать подготовленные данные и методы.
Вот что я могу сделать сейчас:
import javax.script._
val e = new ScriptEngineManager().getEngineByName("scala")
engine.put("x", 123)
engine.eval("val y = x.asInstanceOf[Int] + 100")
Вот что я хотел бы сделать:
case class X(a: Int, b: Int)
val x = X(1,2)
engine.eval("val x1 = X(x.a + 1, x.b + 1)") // Use both X and x