Dan*_*ral 6 reflection scala scala-2.10
我试图从另一个问题中得到一个例子,我遇到了一些我无法解释的事情:
scala> import scala.reflect.runtime.{currentMirror => m}
import scala.reflect.runtime.{currentMirror=>m}
scala> m.mkToolBox()
<console>:12: error: value mkToolBox is not a member of reflect.runtime.universe.Mirror
m.mkToolBox()
^
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> m.mkToolBox()
res3: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@225765b0
Run Code Online (Sandbox Code Playgroud)
怎么mkToolBox不是m导入之前的成员ToolBox,而是之后的成员?
如果我用 来检查它reify,我会看到:
scala> reify{ m.mkToolBox() }.tree
res4: reflect.runtime.universe.Tree =
{
val qual$1 = scala.tools.reflect.`package`.ToolBox(scala.reflect.runtime.`package`.m);
val x$1 = qual$1.mkToolBox$default$1;
val x$2 = qual$1.mkToolBox$default$2;
qual$1.mkToolBox(x$1, x$2)
}
Run Code Online (Sandbox Code Playgroud)
这意味着有一个对ToolBox包对象内命名的函数的方法调用scala.tools.reflect。它不是一个对象,因为reify会公开该apply方法。
因此,即使编译器的 API 文档除了左侧的特征之外没有显示任何内容,如果您查看包,您将看到隐式方法定义。
PS:是的,这是一个真正的问题。我并没有想到以大写开头的方法与特征的名称相同,直到我想到具体化这个东西来获取树。
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |