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.
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]