scala - 如何在 Scala 的 match case 语句中使用 Map 值

标签 scala

我有这样一张 map :

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

然后我尝试在这样的匹配语句中使用它:

"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"
}

如果您不确定 key 是否存在(即使您是,如果您想编写惯用的 Scala,您应该更喜欢:

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

get 返回一个选项,避免您 try catch 您的代码或让它静静地中断。

关于scala - 如何在 Scala 的 match case 语句中使用 Map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433539/

相关文章:

Scala var/val 局部变量最佳实践

java - Java是否允许类型参数为类型参数?

scala - 如何在 Scala Spark 中四舍五入

scala - 使用 asInstanceOf 将 Any 转换为 Double?

scala - IntelliJ 在 Scala 源文件中显示错误,但项目编译成功

scala - Akka 通过负载均衡器询问

scala - 为什么 flatMap 链在第一个 Left 值处停止但在 Right 值处继续

postgresql - Anorm 返回 0 个结果,而 psql 返回 2 个结果

scala - 使用丰富我的库对匿名函数进行类型推断

reflection - 带参数的新实例