Unterschied zwischen dem ClassTag und dem TypeTag der Waage

Gemäß Scala Doc doc TypeTag enthält mehr Informationen als ClassTag. Es scheint mir, dass TypeTag mehr kann als ClassTag, wie die Typparameterinformationen der Kompilierungszeit zur Laufzeit zu bringen, usw.

Das folgende Beispiel zeigt jedoch, dass ClassTag den Job ausführen kann, TypeTag nicht. Ich möchte verstehen, warum.

import scala.reflect.ClassTag
import scala.reflect.runtime.universe.TypeTag
// def func[T](o: Any): Unit = {
// def func[T : TypeTag](o: Any): Unit = {
def func[T : ClassTag](o: Any): Unit = {
  o match {
    case x: T => println(Some(x))
    case _ => println(None)
  }spark
}
func[Map[Int, Int]](List(1, 2, 3))

Only ClassTag führt die Mustererkennung zuNone (das ist das erwartete Verhalten), die ersten beiden kommentierten Zeilen werden mit @ angezeiSome Ast

Es scheint, dass ClassType den Objekttyp zur Laufzeit widerspiegeln kann, während Type Tag dies nicht kann. Aber ist TypeTag nicht eine Obermenge von ClassTag? Ich würde die Erklärung gerne so detailliert wie möglich kennen. Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage