首页 > 解决方案 > scala模式匹配字符串序列中的值

问题描述

变量 someKey 可以是“a”、“b”或“c”。

我可以做这个:

someKey match {
    case "a" => someObjectA.execute()
    case "b" => someOther.execute()
    case "c" => someOther.execute()
    case _ => throw new IllegalArgumentException("Unknown")
}

如何压缩此模式匹配,以便我可以检查 someKey 是否与例如 Seq("b", "c") 以及它是否在序列中,然后将两行模式匹配替换为一行?

编辑:

someKey match {
        case "a" => someObjectA.execute()
        case someKey if Seq("b","c").contains(someKey) => someOther.execute()
        case _ => throw new IllegalArgumentException("Unknown")
    }

标签: scaladesign-patternssequencematching

解决方案


您可以在case子句中使用“或”:

someKey match {
    case "a" => someObjectA.execute()
    case "b"|"c" => someOther.execute()
    case _ => ???
}

推荐阅读