Оценить строковую команду в Scala из REPL
Есть ли способ оценить произвольную строку из Scala, как если бы тот же текст был введен в Scala REPL напрямую? Я имею в виду, я хотел бы сделать что-то вроде этого:
scala> eval("val x = 42")
scala> x
res2: Int = 42
Поскольку Scala REPL принимает команды в цикле eval, используя jline (я полагаю), а затем компилирует/интерпретирует его, должен быть способ представить произвольную строку текста. Я готов взломать Scala REPL, если это необходимо.
2 ответа:
Нет необходимости в повторном взломе-просто переключитесь в режим power user, который дает вам доступ к текущему
scala.tools.nsc.interpreter.IMain
какintp
:scala> :power ** Power User mode enabled - BEEP BOOP SPIZ ** ** :phase has been set to 'typer'. ** ** scala.tools.nsc._ has been imported ** ** global._ and definitions._ also imported ** ** Try :help, vals.<tab>, power.<tab> ** scala> intp.interpret("val x = 42") x: Int = 42 res0: scala.tools.nsc.interpreter.package.IR.Result = Success scala> x res1: Int = 42
Это работает по крайней мере с 2.9.1.
Еще одна возможность-использовать Eval из утилиты Twitter:
val x: Int = new Eval()("1 + 1")