0
我試圖理解下面的代碼段是如何工作的,尤其是第2行,Seq(JsString(bar), _*)
和3號線,must_
,語法是令人費解給我解釋這行代碼在斯卡拉
val foo = (Json.parse(contentAsString(result)
val Seq(JsString(bar), _*) = (foo \\ "bar")
bar must_== "crazy"
我試圖理解下面的代碼段是如何工作的,尤其是第2行,Seq(JsString(bar), _*)
和3號線,must_
,語法是令人費解給我解釋這行代碼在斯卡拉
val foo = (Json.parse(contentAsString(result)
val Seq(JsString(bar), _*) = (foo \\ "bar")
bar must_== "crazy"
線2是模式匹配,但使用val
語法。 foo \\ "bar"
返回Seq
,您可以匹配;
Seq(JsString(bar), _*)
意味着該物品必須匹配到Seq
和第一項必須是一個JsString
,其內容我們將調用bar
,我們不關心其他部分(_*
)。通常你會看到如下所示:
(foo \\ "bar") match {
case Seq(JsString(bar), _*) => // do something with bar
...
}
但事實證明,您可以通過這種方式初始化val
。
此外,對於某些測試框架,must_==
是一個方法名稱(方法可以是字母數字,後接下劃線,後跟符號)。我忘了哪個。但幾乎可以肯定的是,無論是什麼測試 - 無論是什麼和測試 - 都有一個隱含的轉換 - 無論有什麼方法。
THanks,這解釋的東西。問題,所以'bar'被設置爲val作爲副作用?而'_ *'忽略剩下的'JsString'匹配? – Bob
@Bob - 不完全是一種副作用 - 它只是另一種讓你的手掌握你可以引用的變量名稱的方法。 '_ *'匹配任何東西,所以是的,這有效地忽略了其餘部分。 –