使用Scala进行模式匹配案例匹配

时间:2017-10-31 17:12:44

标签: scala

尝试让我的案例匹配按预期工作时出现问题。 我要找的结果如下:

案例1或2 =>随机选择一个参考

任何其他数字超过2 =>随机选择(数字 - 2)参考

案例无=>抛出异常

我在实现这个问题时遇到了问题。到目前为止我有:

 val randomList: List = actualList.size match {
      case 1 => scala.util.Random.shuffle(actualList).take(1)
      case x? => scala.util.Random.shuffle(actualList).take(2)
      case None => throw new IllegalStateException("references have not been generated successfully.")
    }

我收到错误消息,其中包含'无'声明模式类型与预期类型Int。

不兼容

如果有更好的方法来实现这一点,请分享。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用|,警卫和_来实现此目标

  val randomList: List = actualList.size match {
      case 0 => throw new IllegalStateException("references have not been generated successfully.")
      case 1 | 2 => scala.util.Random.shuffle(actualList).take(1)
      case _ => scala.util.Random.shuffle(actualList).take(2)
    }

答案 1 :(得分:2)

我认为你可以立即改组以简化case子句中的每个表达式:

  val actualList = List(1, 2, 3)
  val shuffled = Random.shuffle(actualList)

  shuffled.size match {
    case 0 => throw new RuntimeException()
    case 1 | 2 => shuffled.take(1)
    case _ => shuffled.take(2)
  }