gpt4 book ai didi

scala - 在 Scala 中,为什么不能从类型别名或依赖类型推断 TypeTag?

转载 作者:行者123 更新时间:2023-12-04 10:45:54 26 4
gpt4 key购买 nike

我有一个简单的 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 : 如果type U 不是final 和path-dependent,为什么ctg 可以推断成功?

最佳答案

也许有人会解释为什么局部类型看起来很抽象。也许只是一个错误。

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> { type X = Tuple2[Int, String] ; weakTypeTag[X] }
res0: reflect.runtime.universe.WeakTypeTag[X] = WeakTypeTag[X]

scala> { type X = Tuple2[Int, String] ; typeTag[X] }
^
error: No TypeTag available for X

scala> { type X = Tuple2[Int, String] ; weakTypeTag[X].tpe }
res2: reflect.runtime.universe.Type = X

关于scala - 在 Scala 中,为什么不能从类型别名或依赖类型推断 TypeTag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com