Scala-用于理解的a的模式匹配结果

Scala-用于理解的a的模式匹配结果,scala,coding-style,pattern-matching,for-comprehension,Scala,Coding Style,Pattern Matching,For Comprehension,我目前正在对a的结果进行模式匹配,以便于理解,如下所示 val validXsrf = for( cookie <- request.cookies.get("XSRF-TOKEN"); header <- request.headers.get("X-XSRF-TOKEN"); if cookie.value == header ) yield true; validXsrf match { case Some(true) => callb

我目前正在对a的结果进行模式匹配,以便于理解,如下所示

val validXsrf = for(
    cookie <- request.cookies.get("XSRF-TOKEN"); 
    header <- request.headers.get("X-XSRF-TOKEN"); 
    if cookie.value == header ) yield true;

validXsrf match {
   case Some(true) => callbackFunc();
   case None       => throw new XsrfException();
}
然而,在Scala中,如果不将整个文档包装在括号中以便于理解,这似乎是不可能的


是否有一种更干净/更优雅的方式来表达这种逻辑?

您可以将事情缩写成这样(假设
callbackFunc
返回一个
String
):


事后看来,这一点似乎非常明显。谢谢:)
for(....) match { .... }
def validXsrf():String = {
  val xsrf = for{
    cookie <- request.cookies.get("XSRF-TOKEN")
    header <- request.headers.get("X-XSRF-TOKEN") 
    if cookie.value == header
  } yield callbackFunc()

  xsrf.getOrElse(throw new XsrfException())
}
def validXsrf():Try[String] = {
  val xsrf = for{
    cookie <- request.cookies.get("XSRF-TOKEN")
    header <- request.headers.get("X-XSRF-TOKEN") 
    if cookie.value == header
  } yield callbackFunc()

  xsrf.fold[Try[String]](Failure(new XsrfException()))(Success(_))
}