【发布时间】:2019-02-04 16:24:24
【问题描述】:
我刚刚开始学习 Scala,但我在使用 head 函数时遇到了一些麻烦。我想从 A 元素列表中返回第一个元素。但在 Nil 的情况下,我不知道返回什么。该函数需要 A,但由于 A 是抽象的并且可以是任何东西,我不知道要返回什么。
当我将一个空列表传递给我的 tails 函数时,返回 Nil 工作正常。
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
object List {
def sum(ints: List[Int]): Int = ints match {
case Nil => 0
case Cons(x,xs) => x + sum(xs)
}
def tail[A](xs: List[A]): List[A] = {
xs match {
case Cons(_, ys) => ys
case Nil => Nil
}
}
def head[A](as: List[A]): A = {
as match {
case Cons(b, _) => b
case Nil => Nil
}
}
}
object e31 {
def main(args: Array[String]): Unit = {
val ex3: List[Int] = Cons(1, Cons(2, Nil))
val ex2: List[Int] = Nil;
println(List.sum(ex3)) //3
println(List.tail(ex2)) //Nil
println(List.tail(ex3)) //cons(2, Nil)
//println(List.head(ex3)) //doesn't work
}
}
非常感谢任何有助于理解问题的帮助。
【问题讨论】:
标签: scala list functional-programming traits