0

我试图准确理解以下代码片段的工作原理,特别是第 2Seq(JsString(bar), _*)行和第 3 行must_,语法让我感到困惑

val foo = (Json.parse(contentAsString(result)    
val Seq(JsString(bar), _*) = (foo \\ "bar")
bar must_== "crazy"
4

1 回答 1

7

第 2 行是模式匹配,但使用val语法。 foo \\ "bar"返回 a Seq,您可以匹配它;

Seq(JsString(bar), _*)

表示该项必须与 a 匹配,Seq并且第一项必须是JsString我们将调用其内容的 a bar,而我们不关心其余的 ( _*)。通常你会看到这样的:

(foo \\ "bar") match {
  case Seq(JsString(bar), _*) =>  // do something with bar
  ...
}

但事实证明,您也可以val通过这种方式初始化 s。

此外,must_==是某些测试框架的方法名称(方法可以是字母数字后跟下划线后跟符号)。我忘了哪个。但几乎可以肯定的是,存在从任何东西到经过测试的任何东西的隐式转换,以及经过测试的任何东西有must_==方法。

于 2012-07-03T04:39:31.550 回答