2008-10-10 7 views

Respuesta

6

Nota: ¡esta respuesta no está disponible!

Por favor, véase la respuesta utilizando TypeTag de Scala 2,10 y por encima de

Puedo recomendar #Scala en freenode

10:48 <seet_> http://stackoverflow.com/questions/190368/getting-the-string-representation-of-a-type-at-runtime-in-scala <-- isnt this posible? 
10:48 <seet_> possible 
10:48 <lambdabot> Title: Getting the string representation of a type at runtime in Scala - Stack Overflow, 
        http://tinyurl.com/53242l 
10:49 <mapreduce> Types aren't objects. 
10:49 <mapreduce> or values 
10:49 <mapreduce> println(classOf[T]) should give you something, but probably not what you want. 

+0

Los chicos allí es muy agradable! – svrist

+1

es falso. ver respuesta sobre manifiestos – Alexey

2

Tenga en cuenta que esto no es realmente "la cosa : "

object Test { 
    def main (args : Array[String]) { 
    println(classOf[List[String]]) 
    } 
} 

da

$ scala Test      
class scala.List 

Creo que se puede culpar de esto a borrado

==== ==== EDITAR He intentado hacerlo con un método con un parámetro de tipo genérico:

object TestSv { 
    def main(args:Array[String]){ 
    narf[String] 
    } 
    def narf[T](){ 
    println(classOf[T]) 
    } 
} 

Y el compilador no lo aceptará. Tipos y clases no es la explicación

6

Hay una característica nueva, en su mayor parte no documentada llamada "manifiestos" en Scala; funciona así:

object Foo { 
    def apply[T <: AnyRef](t: T)(implicit m: scala.reflect.Manifest[T]) = println("t was " + t.toString + " of class " + t.getClass.getName() + ", erased from " + m.erasure) 
} 

El AnyRef con destino está ahí para asegurar el valor tiene un método .toString.

+0

Esto no parece funcionar para mí sin el parámetro de valor 't' – acjay

+0

Si usa scala 2.10 y superior, puede usar' TypeTag' en su lugar. Consulte la respuesta 'TypeTag'. – Julie

8

En Scala 2.10 y superior, use TypeTag, que contiene información completa sobre el tipo. Tendrá que incluir la biblioteca scala-reflect con el fin de hacer esto:

import scala.reflect.runtime.universe._ 
def printTheNameOfThisType[T: TypeTag]() = { 
    println(typeOf[T].toString) 
} 

obtendrá resultados como el siguiente:

scala> printTheNameOfThisType[Int] 
Int 

scala> printTheNameOfThisType[String] 
String 

scala> printTheNameOfThisType[List[Int]] 
scala.List[Int] 
Cuestiones relacionadas