如何在模式匹配中打开具有正确类型的选项?

时间:2016-09-15 07:06:28

标签: scala

我有以下代码说明我想要实现但不编译...我想知道类型configMap的{​​{1}}是否包含密钥值Map,如果它确实得到布尔值。

"runOnGrid"

但是这不起作用,因为我无法做val runOnGrid : Boolean = args.configMap.get("runOnGrid") match { case Some(value) : Option[Boolean] => value // <=== compiler error case None => false } ,即我被限制在通过值或类型进行匹配之间进行选择。为了实现这一目标,我需要更好的Scala功夫......有人可以建议吗?

更新:与此同时,我认为这种可怕的方式可以做到这一点

Some(value) : Option[Boolean]

更新:ConfigMap在Scalatest中定义为:

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

4 个答案:

答案 0 :(得分:4)

你可以做这样的事情Some(value: Boolean) Some里面的值可以给出一个类型注释

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

答案 1 :(得分:2)

这个解决方法怎么样:

val runOnGrid : Boolean = args.configMap.get("runOnGrid") match {
  case Some(true) => true
  case _ => false
}

答案 2 :(得分:0)

您收到编译时错误,因为您提到了case to case元素,删除它并且它将起作用,

所以改为,

Output :

Directory/File Name : Dir1
Folder No : 1
Directory/File Name : Dir2
Folder No : 2
Directory/File Name : Dir3
Folder No : 3
Directory/File Name : Dir4
Folder No : 4
Directory/File Name : Dir5
Folder No : 5
Directory/File Name : Dir5a
Folder No : 6
Directory/File Name : Dir5a_1
Folder No : 7
Directory/File Name : Dir5a_2
Folder No : 8
Directory/File Name : Dir5b
Folder No : 9
Directory/File Name : Dir5b_1
Folder No : 10
Directory/File Name : Dir5b_2
Folder No : 11
Directory/File Name : Dir2a
Folder No : 12
Directory/File Name : Dir2b
Folder No : 13

答案 3 :(得分:0)

如果configMap的类型为Map[String, String](当您从文件中读取配置文件时),则可以执行以下操作:

val runOnGrid : Boolean = args.configMap.get("runOnGrid") match {
    case Some("true") => true
    case Some("false") => false
    case _ => false
}