emc*_*sen 5 serialization scala introspection
我想写一个"toSource"函数,它将生成基本案例类的源代码.例如,我想:
case class Person(name: String, age: Int)
val bob = Person("Bob", 20)
println(toSource(bob)) // Should print """Person("Bob", 20)"""
Run Code Online (Sandbox Code Playgroud)
"toString"函数几乎给了我想要的东西,但它会丢弃字符串的引号:
println(bob.toString) // Prints """Person(Bob, 20)"""
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
您可以利用案例类混合特征的事实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)"""
Run Code Online (Sandbox Code Playgroud)