回到反射还刚刚起步的时候,在 Scala 2.10.0 里程碑的日子里,我问了一个问题,关于如何使用它来查看来自 REPL 的代码片段树。出色的答案比我问的更进一步,并展示了如何使用它们来解析和评估树,所以我继续尝试在我今天正在进行的一个小项目中使用它。
不幸的是,以这种方式解析和评估的代码似乎没有看到任何 REPL 定义:
scala> val x = 1
x: Int = 1
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> val tb = scala.reflect.runtime.universe.runtimeMirror(
getClass.getClassLoader).mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = ...
scala> tb.eval(tb.parse("x"))
scala.tools.reflect.ToolBoxError: reflective compilation has failed:
not found: value x
有没有办法让它识别 REPL 上的定义?