【问题标题】:Is this pattern match redundant?这种模式匹配是多余的吗?
【发布时间】:2021-03-12 19:44:43
【问题描述】:

我最近遇到了一个 scala 模式匹配,看起来或多或少是这样的:

def func (li :List[Int]): List[Int] = li match {
  case Nil => Nil
  case start :+ tail => start
  case List() => li
}

现在,这三种不同的情况返回的结果并不是我感兴趣的。

我想知道这样的模式匹配是否会产生任何影响?是否有任何案例,可以达到第三个案例?

我最初的想法是否定的,因为所有超过 0 个元素的列表总是会在第一种情况下匹配,因此永远无法达到第二种情况

【问题讨论】:

  • 两三个案例?无论如何,是的,第三种情况是多余的,它与第一种相同。

标签: scala pattern-matching


【解决方案1】:

您可以阅读帖子:Scala: Nil vs List()。从模式匹配的角度来看,它们是相同的。第三种情况永远不会发生。

在 Scala 源代码中,您可以找到 case object Nil extends List[Nothing] 和 empty list is Nil。

【讨论】:

    【解决方案2】:

    第三种情况是多余的,因为据我所知,空列表只能是Nil。 List 是密封的,所以除了:: 和对象Nil 扩展它之外,不会有其他类。

    但是,一个包含超过 0 个元素的列表将始终匹配 second 的情况。没有元素的列表将匹配第一种情况(如果第一种情况不存在,则匹配第三种情况)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2015-11-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多