【问题标题】:Pattern Matching Case Match using Scala使用 Scala 进行模式匹配大小写匹配
【发布时间】:2017-10-31 17:12:43
【问题描述】:

在尝试使我的案例匹配按预期工作时遇到问题。 我正在寻找的结果如下:

case 1 OR 2 => 随机选择一个参考

case 任何其他大于 2 的数字 => 随机选择 (number - 2) 参考

case None => 抛出异常

我在执行此操作时遇到问题。到目前为止我有:

 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 类型不兼容。

如果有更好的实现方法,请分享。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您的描述中的“case None”代表什么? actualList.size 产生 Int 所以它永远不会是 None。你的意思是0?
  • @AlvaroCarrasco 嗨,是的,这就是我的意思。从字面上看,列表是一个 Int >.

标签: scala


【解决方案1】:

我认为您可以立即改组以简化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)
  }

【讨论】:

    【解决方案2】:

    您可以使用|、guard 和_ 来实现此目的

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

    【讨论】:

    • 谢谢,现在看起来很简单,我可以看到它演示了
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 2011-05-27
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2013-12-07
    • 1970-01-01
    相关资源
    最近更新 更多