2011-01-19 16 views

Respuesta

7

Como se mencionó en "How to Dump/Inspect Object or Variable in Java" (sí, lo sé, la cuestión es sobre Scala):

Scala (consola) tiene una característica muy útil para inspeccionar o volcar variables/valores de objeto:

scala> def b = Map("name" -> "Yudha", "age" -> 27) 
b: scala.collection.immutable.Map[java.lang.String,Any] 

scala> b 
res1: scala.collection.immutable.Map[java.lang.String,Any] = Map((name,Yudha), (age,27)) 

Pero si quieres más detalles, se puede dar una oportunidad REPL Scala Utils, con el fin de obtener una "Easier object inspection in the Scala REPL"

Así que he escrito una utilidad para usar en Scala REPL que mostrará imprimiendo todos los "atributos" de un objeto.

(Nota: "I" estar aquí: Erik Engbrecht, también on BitBucket)

He aquí algunos ejemplos de uso:

scala> import replutils._ 
import replutils._ 

scala> case class Test(a: CharSequence, b: Int) 
defined class Test 

scala> val t = Test("hello", 1) 
t: Test = Test(hello,1) 

scala> printAttrValues(t) 
hashCode: int = -229308731 
b: int = 1 
a: CharSequence (String) = hello 
productArity: int = 2 
getClass: Class = class line0$object$$iw$$iw$Test 

Eso parece bastante anti-climática, pero después de pasar horas escribiendo para ver qué hay, y hurgando en los métodos, parece un milagro.
Además, una buena característica es que si la clase del objeto devuelto es diferente de la clase declarada en el método, imprime tanto la clase declarada como la clase devuelta real.

+0

y cómo lo hace una visualización de todas las variables en ¿el entorno? –

2

En el código compilado, la mejor manera es simplemente declarar su tipo como una clase de caso, luego use el método toString generado.

Todo lo demás subclases Product debe ser tan fácil (actualmente solo tuplas)

De no ser así, escriba su propio método toString, por lo general es bastante trivial ...

Cuestiones relacionadas