interpolacion cadenas scala types

scala - cadenas - interpolacion de variables javascript



Obtener la representaciĆ³n de cadena de un tipo en tiempo de ejecuciĆ³n en Scala (4)

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 puedes echarle la culpa a este borrado

==== EDIT ==== 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

En Scala, ¿es posible obtener la representación de cadena de un tipo en tiempo de ejecución? Estoy tratando de hacer algo en esta línea:

def printTheNameOfThisType[T]() = { println(T.toString) }


Hay una característica nueva, en su mayoría 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 límite de AnyRef está ahí para garantizar que el valor tenga un método .toString.


Nota: ¡esta respuesta está desactualizada!

Por favor, vea la respuesta usando TypeTag para Scala 2.10 y superior

Puedo recomendar #Scala en freenode

10:48 <seet_> http://.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.

Descripción de classOf


En Scala 2.10 y TypeTag posteriores, use TypeTag , que contiene información de tipo completo. Tendrá que incluir la biblioteca scala-reflect para hacer esto:

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

Obtendrás resultados como los siguientes:

scala> printTheNameOfThisType[Int] Int scala> printTheNameOfThisType[String] String scala> printTheNameOfThisType[List[Int]] scala.List[Int]