2013-07-05 22 views
8

Mở liên kết này: https://stackoverflow.com/a/4055850/82609tùy Generic trường hợp lớp ToString

Nó giải thích rằng

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

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

Có cách nào để làm một cái gì đó giống như trộn các lớp trường hợp với một số đặc điểm làm cung cấp một ToString tốt hơn so với mặc định?

Tôi không thực sự muốn không có tên trường được in và đối với các trường hợp lớn, đôi khi rất khó đọc nhật ký.

Có thể có đầu ra như thế này không?

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

Trả lời

8

Làm thế nào để ghi đè toString()? Bạn có thể làm điều đó ngay cả trong một đặc điểm cụ thể (hoặc mỗi lần ở cấp độ của trường hợp lớp và gọi một hàm đối tượng).

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

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

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

đây không phải là giải pháp chung và tôi muốn sử dụng lại trong nhiều trường hợp –

+0

Câu trả lời cập nhật? – rlegendi

+0

Tôi sẽ chấp nhận, nhưng một số câu trả lời phù hợp hơn trong liên kết "có thể trùng lặp" được cung cấp tại đây: http://stackoverflow.com/questions/15718506/scala-how-to-print-case-classes-like-pretty- in-tree –

Các vấn đề liên quan