2013-07-05 13 views
8

su questo link: https://stackoverflow.com/a/4055850/82609personalizzazione generico di caso classe ToString

Essa spiega che

case class Person(name: String, age: Int) { 
    override def productPrefix = "person: " 
} 

// prints "person: (Aaron,28)" instead of "Person(Aaron, 28)" 
println(Person("Aaron", 28)) 

Esiste un modo per fare qualcosa di simile mescolando la classe caso con qualche tratto non fornire una ToString migliore rispetto al uno di default?

Non mi piace molto che i nomi dei campi non vengano stampati, e per le classi di grandi dimensioni a volte è difficile leggere i registri.

È possibile avere un'uscita come questa?

Person(
    name="Aaron", 
    age=28 
) 

risposta

8

Che ne dici di sostituire toString()? Puoi farlo anche in un tratto specifico (o ogni volta a livello della classe case e chiamando una funzione oggetto).

trait CustomToString { 
    override def toString() = "do some reflection magic here" 
} 

case class Person(name: String, age: Int) extends CustomToString 

println(Person("Belä", 222)) 
+0

questa non è una soluzione generica e mi piacerebbe riutilizzarla in molte case history –

+0

E la risposta aggiornata? – rlegendi

+0

Accetto, ma alcune risposte sono più appropriate nel collegamento "possibile duplicato" fornito qui: http://stackoverflow.com/questions/15718506/scala-how-to-print-case-classes-like-pretty- albero stampato –

Problemi correlati