我不是100%確定我明白你問的問題,但是一個可能的答案是從Inside特徵中使用inside。鑑於:
case class Address(street: String, city: String, state: String, zip: String)
case class Name(first: String, middle: String, last: String)
case class Record(name: Name, address: Address, age: Int)
你可以寫:
inside (rec) { case Record(name, address, age) =>
inside (name) { case Name(first, middle, last) =>
first should be ("Sally")
middle should be ("Ann")
last should be ("Jones")
}
inside (address) { case Address(street, city, state, zip) =>
street should startWith ("25")
city should endWith ("Angeles")
state should equal ("CA")
zip should be ("12345")
}
age should be < 99
}
,對於這兩種說法或匹配器的工作原理。詳情點擊這裏:
http://www.scalatest.org/user_guide/other_goodies#inside
如果你正在使用的匹配,只是想斷言值的特定模式一致,你可以在matchPattern語法的另一種選擇:
val name = Name("Jane", "Q", "Programmer")
name should matchPattern { case Name("Jane", _, _) => }
http://www.scalatest.org/user_guide/using_matchers#matchingAPattern
您指出的scalatest-users帖子是從2011年開始的。從那時起,我們爲此用例添加了上述語法。
比爾
其實,我覺得這比在問題解決糟糕:未能給出一個不太有用的消息。 – 2015-02-04 06:15:13
這是一個很好的觀點。我已經改進了解決該問題的答案,但該解決方案可能無法實現「簡潔」的目標。 – 2015-02-04 17:15:40