这个模式匹配是多余的吗?
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 的列表将始终匹配第一种情况,因此永远无法达到第二种情况
第三种情况是多余的,因为据我所知,空列表永远只能是Nil
。 List
是密封的,所以除了 ::
和扩展它的对象 Nil
之外不会有 类。
但是,包含多于 0 个元素的列表将始终匹配 second 情况。没有元素的列表将匹配第一种情况(如果第一种情况不存在,则匹配第三种情况)。
您可以阅读 post: Scala: Nil vs List()。从模式匹配的角度来看,它们是相同的。第三种情况永远不会命中。
在 Scala 源代码中你可以找到 case object Nil extends List[Nothing]
, and that empty list is Nil.
我最近迷上了一个 scala 模式匹配,它看起来或多或少是这样的:
def func (li :List[Int]): List[Int] = li match {
case Nil => Nil
case start :+ tail => start
case List() => li
}
现在,这三种不同的情况 return 并不是我感兴趣的。
我想知道像这样的模式匹配是否会产生任何效果?有没有任何情况可以达到第三种情况?
我最初的想法是否定的,因为所有元素多于 0 的列表将始终匹配第一种情况,因此永远无法达到第二种情况
第三种情况是多余的,因为据我所知,空列表永远只能是Nil
。 List
是密封的,所以除了 ::
和扩展它的对象 Nil
之外不会有 类。
但是,包含多于 0 个元素的列表将始终匹配 second 情况。没有元素的列表将匹配第一种情况(如果第一种情况不存在,则匹配第三种情况)。
您可以阅读 post: Scala: Nil vs List()。从模式匹配的角度来看,它们是相同的。第三种情况永远不会命中。
在 Scala 源代码中你可以找到 case object Nil extends List[Nothing]
, and that empty list is Nil.