Nel REPL, sto scrivendo gli esempi da Reflection - TypeTags and Manifests.WeakTypeTag v. TypeTag
Sono confuso dalla differenza tra WeakTypeTag
e 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
Esecuzione di un semplice, non esaustivo Esempio
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)
Qual è la differenza tra loro?
Questa risposta è http://stackoverflow.com/questions/12218641/scala-what-is-a-typetag-and-how-do-i-use-it ma non con il miglior esempio – sschaef