2017-08-01 2 views
0

Dans le code suivant, la première expression renvoie Result [String] qui contient l'une des chaînes «medical», «dental» ou «pharmacy» dans un résultat. Je peux ajouter .toOption.get à la fin de l'instruction val pour obtenir la chaîne, mais y a-t-il une meilleure façon d'utiliser le résultat? Sans le .toOption.get, le code ne sera pas compilé.Comment utiliser un résultat [String] dans l'expression de correspondance Scala

val service = element("h2").containingAnywhere("claim details").fullText() 
    service match { 
     case "medical" => extractMedicalClaim 
     case "dental" => extractDentalClaim 
     case "pharmacy" => extractPharmacyClaim 
    } 
+2

Où la classe 'Result' est-elle définie? Une partie d'un cadre? Ce n'est pas une classe de scala standard pour autant que je sache, et difficile à répondre sans documentation. –

Répondre

0

Difficile à dire sans le savoir qu'est-ce que Result est. Si c'est un case class, avec la cible String dans le cadre de son constructeur, alors vous pourriez correspondre directement.

Quelque chose comme ça.

service match { 
    case Result("medical") => extractMedicalClaim 
    case Result("dental") => extractDentalClaim 
    case Result("pharmacy") => extractPharmacyClaim 
    case _ => // default result 
} 

Si la classe Result ne dispose pas d'un extracteur (la méthode upapply()) vous pourriez être en mesure d'ajouter un peu à cet effet.

0

Je suppose que cette classe Result[T] a une méthode toOption qui renvoie un Option[T] - si tel est le cas, vous pouvez appeler toOption et match sur cette option:

val service = element("h2").containingAnywhere("claim details").fullText().toOption 
service match { 
    case Some("medical") => extractMedicalClaim 
    case Some("dental") => extractDentalClaim 
    case Some("pharmacy") => extractPharmacyClaim 
    case None => // handle the case where the result was empty 
} 
+0

ou juste pour agir sur non-vide, 'x.toOption.foreach {case" med "=> ??? } '. –