如何在Scala匹配表达式中使用Result [String]

时间:2017-08-01 21:20:02

标签: scala match

在下面的代码中,第一个表达式返回一个Result [String],其中包含一个字符串" medical"," dental"或"药房"在结果里面。我可以将.toOption.get添加到val语句的末尾以获取String,但是有更好的方法来使用Result吗?如果没有.toOption.get,代码将无法编译。

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

2 个答案:

答案 0 :(得分:0)

我假设此Result[T]类有一个toOption方法返回Option[T] - 如果是这种情况,您可以调用toOption并匹配该选项:

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
}

答案 1 :(得分:0)

很难说不知道Result是什么。如果它是case class,目标String作为其构造函数的一部分,那么您可以直接模式匹配。

像这样。

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

如果Result类没有提取器(upapply()方法),您可以为此添加一个提取器。