У меня есть простая 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 не является окончательным и не зависит от пути, почему ctg может быть выведен успешно?