我有这样的地图:
val mealIdsMap: Map[String, String] =
Map (
"breakfast" -> "omelet",
"lunch" -> "steak",
"dinner" -> "salad"
)
然后,我尝试在如下所示的match语句中使用它:
"omelet" match
{
case mealIdsMap("breakfast") => "Thank God"
}
我得到这个错误:
error: value mealIdsMap is not a case class constructor,
nor does it have an unapply/unapplySeq method
case mealIdsMap("breakfast") => "Thank God"
有谁知道如何在match / case语句中使用这样的地图?
非常感谢你的帮助。
最佳答案
您应该从教程中阅读模式匹配的目的,可能来自this one(谷歌上第一个非平凡的示例)。
您已经颠倒了测试:
mealIdsMap("breakfast") match {
case "omelet" => "Thank God"
case _ => "Don't forget a default"
}
而且,如果您不确定该密钥是否存在(即使您确实存在该密钥,那么即使您想编写惯用的scala,也应该选择:
mealIdsMap.get("breakfast") match {
case Some("omelet") => "Thank God"
case _ => "Don't forget a default"
}
get
返回一个选项的地方,避免您尝试捕获代码或使其静默中断。