【发布时间】:2020-04-29 17:01:36
【问题描述】:
我有一个简单的 scala 程序来测试 Scala 推断类型类的能力:
import scala.reflect.ClassTag
object InferTypeTag {
import org.apache.spark.sql.catalyst.ScalaReflection.universe._
def infer(): Unit = {
type U = (Int, String)
val ttg1 = implicitly[TypeTag[(Int, String)]]
val ttg2 = implicitly[TypeTag[U]]
val ctg = implicitly[ClassTag[U]]
}
}
ttg1 毫无问题地推断出来。
ttg2 触发了以下编译错误:
Error:(14, 26) No TypeTag available for U
val ttg2 = implicitly[TypeTag[U]]
问题 1:为什么它不起作用? U 类型已经是最终的,无法覆盖
问题2:如果类型U不是final和路径依赖的,为什么ctg可以推断成功?
【问题讨论】:
-
看起来像一个错误,考虑到
scala-reflect的永久实验状态,这并不奇怪
标签: scala implicit scala-reflect