5

我想编写一个“toSource”函数来生成基本案例类的源代码。例如,我想:

case class Person(name: String, age: Int)
val bob = Person("Bob", 20)
println(toSource(bob)) // Should print """Person("Bob", 20)"""

“toString”函数几乎给了我我想要的东西,但它去掉了字符串周围的引号:

println(bob.toString) // Prints """Person(Bob, 20)"""

任何想法如何做到这一点?

4

1 回答 1

6

您可以利用案例类混合 trait 的事实Product

def toSource(p: Product): String =
   p.productIterator.map {
      case s: String => "\"" + s + "\""
      case other => other.toString
   } mkString (p.productPrefix + "(", ", ", ")")

toSource(Person("Bob", 20))  // yields """Person("Bob", 20)"""
于 2012-10-30T23:37:24.493 回答