2016-03-29 28 views
0

Bunun üzerine çöktü. PlayJSON ve JsObject ile çalışmak.Serializable içeren ertelenmiş tür nasıl çözümlenir

Siğil giderici, map aramasını bir havuçla (^) işaretliyor ve bu satırda Serializable içeren türetilmiş bir tür olduğunu söylüyor. Kod işlevsel ve çalışıyor ancak aracın bunu neden işaretlediğini ve bu hatayı nasıl kaldıracağımızı daha fazla merak ediyoruz.

def getPrintVersionOfJsonObj(jsObj: JsObject): JsObject = { 
    val fieldValueMap: Seq[(String,JsValue)] = jsObj.fields.map { 
     case (fieldName, fieldValue: JsNumber) => (fieldName, fieldValue) 
     case (fieldName, fieldValue: JsBoolean) => (fieldName, fieldValue) 
     case (fieldName, fieldValue: JsString) => (fieldName, fieldValue) 
     case (fieldName, fieldValue: JsArray) => (fieldName, convertJsArrayToPrettyString(fieldValue)) 
     case (fieldName, fieldValue: JsObject) => (fieldName, getPrintVersionOfJsonObj(fieldValue)) 
     case (fieldName, fieldValue: JsValue) => (fieldName, JsString(Json.prettyPrint(fieldValue))) 
    } 

    JsObject(fieldValueMap) 
} 

JSObject.fields Ne kafa karıştırıcı buluyorum o val fieldValueMap için dönüş türü tanıyoruz olduğunu scala.collection.Seq[scala.Tuple2[scala.Predef.String, play.api.libs.json.JsValue]]

olduğunu ve hatta derler (ı don emin misiniz

cevap

0

jsObj.fields türünü bilmek nasıl göründüğünü görmüyor musun?

ilk (String, String) dördüncüsü döner (göründüğü gibi olmak) ise, (String, JsNumber) döndürür senin match ait case (örneğin). Bu iki türün tek ortak süper tipi Serializable'dur, yani var oluşu budur.

+0

dördüncü olanı döndürür '' '(String, JsString)' 've JsString' '', JsString (value: String), JsValue''' – Barry

+0

öğesini genişletir. Bu durumda, wartremover yanlıştır (sonraki satırın sağlanması koşuluyla) ayrıca bir "JsValue" döndürür. Kod gerçekten derleniyor mu? – Dima

+0

yea son zamanlarda tasarladığımız gibi çalışıyor ve projeye siğil sökücü ekledik ve sorunların çözümü için çalışıyorduk. – Barry

İlgili konular