2012-10-30 25 views
5

olarak yazdırılır. Temel durum sınıfları için kaynak kodu üretecek bir "toSource" işlevi yazmak istiyorum.Scala: ForString'i geçersiz kılmak için tırnaklar

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

"toString" fonksiyonu neredeyse Bana istediğimi verir, ancak dizeleri etrafında tırnak düşer: Örneğin, İsterdim

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

Herhangi fikirleri nasıl bunu?

cevap

5

O durumda sınıfları özelliği Product karıştırmak gerçeği yararlanabilir: çalışır

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)""" 
+2

! Ve başka bir durum ekleyerek yuvalanmış vaka sınıfları ile çalışmak için yapılabilir: "durum p: Ürün => toSource (p)" – emchristiansen

+0

Bu bir varsayılan derleme yapmak için bir tür sihirli derleyici bayrağı veya bir şey olsaydı ben isterim Daha sonra biri 'Set() 've' Set ("") 'yi ayırt edebilir – samthebest