如何在模式匹配中用正确的类型解开 Option?

Sky*_*ker 0 scala

我有以下代码说明了我想要实现的目标,但它无法编译……我想确定configMapof 类型是否Map包含一个带值的键,"runOnGrid"以及它是否确实获得了它的布尔值。

val runOnGrid : Boolean = args.configMap.get("runOnGrid") match {
    case Some(value) : Option[Boolean] => value // <=== compiler error
    case None => false
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我不能这样做,Some(value) : Option[Boolean]即我必须在按值或按类型匹配之间进行选择。为了实现这一点,显然我需要更好的 Scala 功夫……谁能给点建议?

更新:同时我想出了这种可怕的方式来做到这一点

val runOnGrid = args.configMap.get(("runOnGrid") match {
    case Some(value) => value.isInstanceOf[Boolean] && value.asInstanceOf[Boolean]
    case _ => false
}
Run Code Online (Sandbox Code Playgroud)

更新:ConfigMap 在 Scalatest 中定义为:

class ConfigMap(underlying: Map[String, Any]) extends Map[String, Any] ...
Run Code Online (Sandbox Code Playgroud)

pam*_*amu 5

你可以Some(value: Boolean)在里面做类似这样的事情Some可以给一个类型注解

val runOnGrid : Boolean = args.configMap.get("runOnGrid") match {
    case Some(value: Boolean) => value
    case _ => false
}
Run Code Online (Sandbox Code Playgroud)