在Scala中解释这些代码行

时间:2012-07-03 03:58:05

标签: scala

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

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

1 个答案:

答案 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_==方法测试什么,测试任何方法,都会隐式转换。