In REPL, I write examples from Reflection - TypeTags and Manifests .
I am confused by the difference between WeakTypeTag and TypeTag .
scala> import scala.reflect.runtime.universe._ import scala.reflect.runtime.universe._
TypeTag
scala> def paramInfo[T](x: T)(implicit tag: TypeTag[T]): Unit = { | val targs = tag.tpe match { case TypeRef(_, _, args) => args } | println(s"type tag of $x has type arguments $targs") | } paramInfo: [T](x: T)(implicit tag: reflect.runtime.universe.TypeTag[T])Unit
WeakTypeTag
scala> def weakParamInfo[T](x: T)(implicit tag: WeakTypeTag[T]): Unit = { | val targs = tag.tpe match { case TypeRef(_, _, args) => args } | println(s"type tag of $x has type arguments $targs") | } weakParamInfo: [T](x: T)(implicit tag: reflect.runtime.universe.WeakTypeTag[T])Unit
Executing a simple, non-exhaustive example
scala> paramInfo2(List(1,2,3)) type of List(1, 2, 3) has type arguments List(Int) scala> weakParamInfo(List(1,2,3) | ) type tag of List(1, 2, 3) has type arguments List(Int)
What is the difference between the two?
scala
Kevin meredith
source share