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 - 不完全是一种副作用 - 它只是另一种让你的手掌握你可以引用的变量名称的方法。 '_ *'匹配任何东西,所以是的,这有效地忽略了其余部分。 –