2017-08-01 29 views
0

在下面的代碼中,第一個表達式返回Result [String],其中包含結果內部的字符串「medical」,「dental」或「pharmacy」之一。我可以將.toOption.get添加到val語句的末尾以獲取字符串,但有沒有更好的方法來使用結果?如果沒有.toOption.get,代碼將無法編譯。如何在Scala匹配表達式中使用結果[String]

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

「Result」類定義在哪裏?一些框架的一部分?據我所知,它不是一個標準的Scala課程,如果沒有相關文檔,很難回答。 –

回答

0

硬不知道該說些Result是什麼。如果它是case class,目標String作爲其構造函數的一部分,則可以直接對匹配進行模式匹配。

就是這樣。

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

如果Result類沒有提取器(該upapply()方法),你可能能夠補充一點,爲了這個目的之一。

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 
} 
+0

或只是爲了處理非空,'x.toOption.foreach {case「med」=> ??? }'。 –

相關問題