scala – 模式匹配以查找列表的最后一个元素
发布时间:2020-12-16 18:27:29 所属栏目:安全 来源:网络整理
导读:我试图使用模式匹配找到 scala中列表的最后一个元素.我试过以下代码 def last[A](list: List[A]):A = list match { case head :: Nil = head case head :: tail = last(tail) case _ = Nil } 最后一种情况,即case _ = Nil因类型不匹配而抛出错误(发现Nil.typ
我试图使用模式匹配找到
scala中列表的最后一个元素.我试过以下代码
def last[A](list: List[A]):A = list match { case head :: Nil => head case head :: tail => last(tail) case _ => Nil } 最后一种情况,即case _ => Nil因类型不匹配而抛出错误(发现Nil.type需要A) 我知道这个问题可以使用其他方法解决,但只使用模式匹配是否有办法解决这个问题? 因为列表是泛型类型所以我不能用类型A的默认值替换Nil,它只能在运行时确定. 删除此行:case _ => Nil显然在工作,但警告说在Nil参数的情况下会失败. 那么,在这种情况下如何处理Nil参数呢? 解决方法
使用Option [T]返回结果,所以如果有一些元素返回Some(lastElement),否则返回Option.empty
例, def last[A](list: List[A]): Option[A] = list match { case head :: Nil => Option(head) case head :: tail => last(tail) case _ => Option.empty } it("returns last element") { assert(last(List("apple")) == Some("apple")) assert(last(List("apple","mango")) == Some("mango")) assert(last(List()) == Option.empty) assert(last(List()) == None) } 如何访问Option [T]? last(List("In absentia","deadwind")) match { case Some(lastValue) => println(s"Yayy there was lastValue = ${lastValue}") //prints Yayy there was lastValue = deadwind case None => println("Oops list was empty") } last(List()) match { case Some(lastValue) => println(s"Yayy there was lastValue = ${lastValue}") case None => println("Oops list was empty") //prints Oops list was empty } // or using map last(List("In absentia","deadwind")).map(lastValue => print(s"lastValue is ${lastValue}")) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |