我正在尝试准确理解以下代码段的工作原理,特别是第2行,Seq(JsString(bar), _*)
和第3行,must_
,语法让我感到困惑
val foo = (Json.parse(contentAsString(result)
val Seq(JsString(bar), _*) = (foo \\ "bar")
bar must_== "crazy"
答案 0 :(得分:7)
第2行是模式匹配,但使用val
语法。 foo \\ "bar"
会返回Seq
,您可以匹配;
Seq(JsString(bar), _*)
表示该项必须与Seq
匹配,且第一项必须是JsString
,其内容我们将调用bar
,我们不关心其余内容({ {1}})。通常你会这样看:
_*
但事实证明你也可以用这种方式初始化(foo \\ "bar") match {
case Seq(JsString(bar), _*) => // do something with bar
...
}
。
此外,对于某些测试框架,val
是方法名称(方法可以是字母数字,后跟下划线后跟符号)。我忘了哪个。但几乎可以肯定的是,无论采用must_==
方法测试什么,测试任何方法,都会隐式转换。