我们声明object Nil
扩展TweetList
有什么好处?
为什么不仍然使用class Nil
?
trait TweetList {
def head: Tweet
def tail: TweetList
def isEmpty: Boolean
def foreach(f: Tweet => Unit): Unit =
if (!isEmpty) {
f(head)
tail.foreach(f)
}
}
object Nil extends TweetList {
def head = throw new java.util.NoSuchElementException("head of EmptyList")
def tail = throw new java.util.NoSuchElementException("tail of EmptyList")
def isEmpty = true
}
class Cons(val head: Tweet, val tail: TweetList) extends TweetList {
def isEmpty = false
}
答案 0 :(得分:1)
这里是a link,介绍如何使用单例类。
上面的评论中也提到了这一点,但是我再次解释。
在scala中,object
声明用于单个对象。
在这种情况下,Nil
的作用是代表“空虚”,并用作连续cons
的最后一个参数
cons(a, Nil) => List(a)
cons(a, cons(b, Nil)) => List(a, b)
那么为什么Nil
是object
并扩展了List
?原因,
List
空度的单一表示。我们不需要多个Nil实例。
cons
的第二个参数是List
类型也很有意义。