如何在Scala中的匹配大小写语句中使用Map值

lda*_*son 2 scala

我有这样的地图:

val mealIdsMap: Map[String, String]    =
Map (
      "breakfast"     ->    "omelet",
      "lunch"         ->    "steak",
      "dinner"        ->    "salad"
)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在匹配语句中使用它,如下所示:

"omelet" match 
{ 
  case mealIdsMap("breakfast") => "Thank God"
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

error: value mealIdsMap is not a case class constructor,
nor does it have an unapply/unapplySeq method
              case mealIdsMap("breakfast") => "Thank God"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何在匹配/案例陈述中使用这样的地图?

非常感谢你的帮助.

Nic*_*las 7

您应该从教程中了解模式匹配的目的是什么,可能来自这个(谷歌上的第一个非常重要的例子).

你颠倒了测试:

mealIdsMap("breakfast") match {
  case "omelet" => "Thank God"
  case _ => "Don't forget a default"
}
Run Code Online (Sandbox Code Playgroud)

如果你不确定密钥是否存在(即使你是,如果你想编写惯用的scala,你应该更喜欢:

mealIdsMap.get("breakfast") match {
  case Some("omelet") => "Thank God"
  case _ => "Don't forget a default"
}
Run Code Online (Sandbox Code Playgroud)

get返回一个选项,避免你尝试抓住你的代码或让它打破静默.