我開始學習偉大的Scala語言ANG有一個關於「深」模式匹配斯卡拉:有case類和代碼塊模式匹配選項
我有一個簡單Request
類問題:
case class Request(method: String, path: String, version: String) {}
和一個函數,試圖以匹配request
實例,並建立相應的響應:
def guessResponse(requestOrNone: Option[Request]): Response = {
requestOrNone match {
case Some(Request("GET", path, _)) => Response.streamFromPath(path)
case Some(Request(_, _, _)) => new Response(405, "Method Not Allowed", requestOrNone.get)
case None => new Response(400, "Bad Request")
}
}
見,我用requestOrNone.get
內case
聲明以獲取操作Request
對象。由於case
聲明匹配,它是否安全?我覺得有點難看。是否可以從Some
「打開」Request
對象,但仍能匹配Request
類字段?
如果我想要一個case
內部複雜的計算與局部變量,等...我可以使用後case
語句{}
塊?我使用官方Scala插件的IntelliJ Idea,並突出顯示了我的括號,並建議將其刪除。
如果可能的話,是否將比賽中的比賽包含在比賽中?
... match {
case Some(Request("GET", path, _)) => {
var stream = this.getStream(path)
stream match {
case Some(InputStream) => Response.stream(stream.get)
case None => new Response(404, "Not Found)
}
}
}
你能指點我的文檔頁面在哪裏解釋'@'?我嘗試谷歌它 – dmzkrsk
別名是scala語法的一部分(內置,而不是從一個插件):'case aliasA @ PatExpr(_,subAlias @ PatExpr(_,_))=> println(s「$ aliasA/$ subAlias 「)' – cchantep