Frage

Ich bin ein Scala Anfänger und dieses Stück Code macht mir Kampf.

Gibt es eine Möglichkeit Mustervergleich zu tun, dass alles i an Daten übergeben zu machen, ist der richtige Typ? Wie Sie kann ich ziemlich seltsam Datentypen sehen haben ...

class Data (
val recipient: String, 
val templateText: String, 
val templateHtml: String, 
val blockMaps: Map[String,List[Map[String,String]]], 
templateMap: Map[String,String]
)

...

val dataParsed = JSON.parseFull(message)
dataParsed match {
 case dataParsed: Map[String, Any] => {
  def e(s: String) = dataParsed get s
  val templateText = e("template-text")
  val templateHtml = e("template-html")
  val recipient = e("email")
  val templateMap = e("data")
  val blockMaps = e("blkdata")

  val dependencies = new Data(recipient, templateText, templateHtml, blockMaps, templateMap)
  Core.inject ! dependencies
 }

...

War es hilfreich?

Lösung

Ich denke, Ihr Problem ist, dass Sie die Karte auf patten übereinstimmen, die Sie von parseFull() erhalten können, wollen, aber Map keine unapply haben.

So Sie Muster jeden einzelnen Wert übereinstimmen könnten, eine Standard bereitstellt, wenn es nicht vom richtigen Typ ist:

val templateText: Option[String] = e("template-text") match {
  case s: String => Some(s)
  case _ => None
}

oder alle vorübergehend setzt die Daten in eine Struktur, die Muster angepasst werden kann:

val data = (e("template-text"), e("template-html"), e("email"), e("data"),
            e("blkdata"))

val dependencies: Option[Data] = data match {
  case (templateText: String,
        templateHtml: String,
        blockMaps: Map[String,List[Map[String,String]]],
        templateMap: Map[String,String]) =>
    Some(new Data(recipient, templateText, templateHtml, blockMaps, templateMap))
  case _ => None
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top