【发布时间】:2014-03-16 13:05:26
【问题描述】:
在Scala reflection guide中是这样写的:
与清单一样,实际上可以要求编译器 生成一个 TypeTag。这是通过简单地指定一个隐式来完成的 TypeTag[T] 类型的证据参数。如果编译器找不到 在隐式搜索期间匹配隐式值,它会自动 生成一个 TypeTag[T]。
ThisStackOverflow 的回答很好地解释了“隐含证据”的概念。但是,我仍然不完全清楚 编译器将 生成一个 TypeTag[T]。
这是否意味着这是“隐含证据”搜索的特例? IE。当编译器进行隐式搜索时,类 TypeTag[T] 以特殊方式处理?我试图在 Scala 反射 API 中查找隐式参数值,但没有找到提供 TypeTag[T] 的任何参数值,因此我假设 TypeTag[T] 隐式参数来自编译器内部(如文档所述)。所以类名 TypeTag[T] 被硬编码到编译器的源代码中。这个假设正确吗?
是否在某处记录了隐式值的自动生成?换句话说,是否有一个文档列出了所有自动生成的隐含证据?我在Scala language specification(2.9 版)中没有找到 TypeTag[T]。与 TypeTag[T] 最接近的概念是 Manifest,它是自动生成的隐式参数。 Manifests 是 Scala 2.9 中唯一自动生成的隐式值参数吗?
【问题讨论】:
标签: scala reflection implicit scala-2.10 scala-compiler