2013-07-05 7 views
8

Auf diesem Link: https://stackoverflow.com/a/4055850/82609Allgemein Anpassung von Fallklasse ToString

Es erklärt, dass

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

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

Gibt es eine Möglichkeit etwas wie Mischen der Fall Klasse mit etwas Zug zu tun, um eine bessere ToString als die liefern Standard eins?

Ich mag es nicht, nicht die Feldnamen gedruckt zu haben, und für große Fallklassen ist es manchmal schwer, die Protokolle zu lesen.

Ist es möglich, eine Ausgabe wie diese zu haben?

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

Antwort

8

Wie wäre es mit dem Überschreiben toString()? Sie können dies auch in einem bestimmten Merkmal (oder jedes Mal auf der Ebene der Fallklasse und beim Aufruf einer Objektfunktion) tun.

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

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

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

dies ist keine generische Lösung und ich möchte es in vielen Fall Klassen wiederverwenden –

+0

Wie wäre es mit der aktualisierten Antwort? – rlegendi

+0

Ich werde akzeptieren, aber einige Antworten sind geeigneter in der "mögliche Duplikat" -Link hier: http://Stackoverflow.com/questions/15718506/scala-how-to-print-case-classes-like-pretty- printed-tree –