Scala-用于理解的a的模式匹配结果
我目前正在对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
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(_))
}