这个模式匹配是多余的吗?

Is this pattern match redundant?

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

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

现在,这三种不同的情况 return 并不是我感兴趣的。

我想知道像这样的模式匹配是否会产生任何效果?有没有任何情况可以达到第三种情况?

我最初的想法是否定的,因为所有元素多于 0 的列表将始终匹配第一种情况,因此永远无法达到第二种情况

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

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

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

在 Scala 源代码中你可以找到 case object Nil extends List[Nothing], and that empty list is Nil.