在Scala 反射指南中写了以下内容:
与 Manifest 一样,实际上可以请求编译器生成一个 TypeTag。这是通过简单地指定 TypeTag[T] 类型的隐式证据参数来完成的。如果编译器在隐式搜索过程中找不到匹配的隐式值,它会自动生成一个 TypeTag[T]。
这个StackOverflow 答案很好地解释了“隐含证据”的概念。但是,我仍然不完全清楚编译器将生成TypeTag[T] 意味着什么。
这是否意味着这是“隐含证据”搜索的特例?即当编译器进行隐式搜索时,类 TypeTag[T] 以特殊方式处理?我试图在 Scala 反射 API 中查找隐式参数值,但没有找到提供 TypeTag[T] 的任何参数值,因此我假设 TypeTag[T] 隐式参数来自编译器内部(如文档所述)。所以类名 TypeTag[T] 被硬编码到编译器的源代码中。这个假设正确吗?
隐含值的自动生成是否记录在某处?换句话说,是否有一个文档列出了所有自动生成的隐含证据?我在Scala 语言规范(2.9 版)中没有找到 TypeTag[T] 。与 TypeTag[T] 最接近的概念是 Manifest,它是自动生成的隐式参数。Manifests 是 Scala 2.9 中唯一自动生成的隐式值参数吗?