我正在尝试使用模式匹配在scala中查找列表的最后一个元素。我想下面的代码模式匹配找到列表的最后一个元素
def last[A](list: List[A]):A = list match {
case head :: Nil => head
case head :: tail => last(tail)
case _ => Nil
}
最后一种情况,即案件_ =>无抛出错误类型不匹配(发现Nil.type要求A)
我知道这个问题可以用其他方法,但是使用来解决只有模式匹配才有办法解决这个问题?
由于列表是泛型类型,所以我不能用N的缺省值替换,只能在运行时确定类型A的缺省值。
删除该行:case _ =>无显然正在工作,但有一个警告,它会在无参数的情况下失败。
那么,在这种情况下如何处理无参数?
有什么办法可以在这里指定类似于“Null”的东西(比如在Java中)泛型类型(这样我们可以避免使用Option)? – Shashank
不推荐,因为这个想法是删除'null'的概念。最后一个元素可以是“某个值”或“空”。你有任何问题操纵返回的'Option'值? 'returnsValue match {}'是处理返回的最后一个值的方法 – prayagupd
Shashank,在罕见的情况下,你可能会看到这样的情况,它在性能上有很大的差异,但它不会是惯用的Scala。请注意,在这种情况下,您必须将A限制为AnyRef,即'last [A <:AnyRef]'。 – AmigoNico