我一直在玩 2.11 中用于编译器和 repl 的新 API,并且遇到了一些奇怪的事情。这是我的 repl 输出:
Welcome to Scala version 2.11.0-20140415-163722-cac6383e66 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import scala.tools.nsc.interpreter.IMain
import scala.tools.nsc.interpreter.IMain
scala> import scala.tools.nsc.Settings
import scala.tools.nsc.Settings
scala> val eng = new IMain(new IMain.Factory(), new Settings())
eng: scala.tools.nsc.interpreter.IMain = scala.tools.nsc.interpreter.IMain@649b982e
scala> eng.interpret("val x: Int = 2")
x: Int = 2
res0: scala.tools.nsc.interpreter.IR.Result = Success
scala> eng.valueOfTerm("x")
res2: Option[Any] = Some(2)
scala> eng.typeOfTerm("x")
res3: eng.global.Type = ()Int
scala> eng.typeOfExpression("x")
res4: eng.global.Type = Int
scala> eng.typeOfExpression("x") =:= eng.global.definitions.IntTpe
res6: Boolean = true
scala> eng.typeOfTerm("x") =:= eng.global.definitions.IntTpe
res7: Boolean = false
如您所见,typeOfTerm("x")
返回()Int
,但typeOfExpression("x")
返回Int
。我认为类型()Int
表示变量的情况是 type Int
,但我不能确定。如果有人可以确认或纠正我的困惑,并可能将我引导至任何讨论此问题的文档,我将不胜感激。我浏览了我能找到的反射文档,但没有任何运气。