5

有没有办法评估来自 Scala 的任意字符串,就好像直接将相同的文本输入到 Scala REPL 中一样?我的意思是,我想做这样的事情:

scala> eval("val x = 42")

scala> x
res2: Int = 42

由于 Scala REPL 使用 jline(我相信)在 eval 循环中接受命令,然后编译/解释它,因此必须有一种方法来提交任意文本行。如有必要,我愿意破解 Scala REPL。

4

2 回答 2

14

无需 REPL hack — 只需切换到高级用户模式,即可访问当前scala.tools.nsc.interpreter.IMainintp

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 开始有效。

于 2012-08-12T16:21:42.373 回答
2

另一个机会是使用Twitter Utility 中的Eval

val x: Int = new Eval()("1 + 1")
于 2012-08-12T16:51:24.487 回答