2016-04-17 54 views
3

我有一個特點Processor看起來像這樣寫:播放與泛型參數

trait Processor[A] { 
    def process(in: Seq[Byte]): Result[A] 
} 

trait Result[A]{ 
    val ok: Boolean 
    val errorMessage: Option[String] 
    val data: Option[A] 
} 

具體實現:

class StringProc extends Processor[String] { 
    def process(in: Seq[Byte]): StrResult 
} 

case class StrResult(...) extends Result[String] 
object StrResult { 
    implicit val writes = Json.writes[StrResult] 
} 

當使用StringProc實例作爲Processor[String]類型的返回類型不出意外的是processResult[String],而不是StrResult。不幸的是,Writes[StrResult]似乎是沒用在這種情況下:

發現型結果無JSON序列[字符串]

我怎麼能處理這種情況?

回答

5

您可以嘗試

object Result { 
    implicit def resWrites[T](implicit nested: Writes[T]): Writes[Result[T]] = OWrites[Result[T]] { res => 
    Json.obj("ok" -> res.ok, "errorMessage" -> res.errorMessage, 
     "data" -> nested.writes(res.data)) 
    } 
} 
+0

的對象中的行給我_No不應用或unapplySeq功能found_。也許是因爲'結果[A]'是一個特質而不是一個班級? – ceran

+0

謝謝。仍然試圖找出它是如何工作的,但它確實有效;)訣竅是嵌套寫入是由編譯器自動提供的,對吧? – ceran

+0

沒有什麼竅門,這只是隱式作用域的標準方式。 – cchantep