我有这样的地图:

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返回一个选项的地方,避免您尝试捕获代码或使其静默中断。

09-05 19:40