Scala 对象扩展trait v.s类扩展trait

Scala 对象扩展trait v.s类扩展trait,scala,Scala,我们声明object Nil扩展TweetList有什么好处? 为什么不仍然使用类Nil呢 下面介绍如何使用singleton类 上面的评论也提到了这一点,但我再次解释 在scala中,对象声明用于单例对象。 在这种情况下,Nil的角色是表示“空”,并用作连续cons的最后参数 consa,Nil=>Lista consa,consb,Nil=>Lista,b 那么为什么Nil是对象并扩展列表呢?因为 Nil被用作列表空白的单一表示。 我们不需要多个Nil实例。 cons的第二个参数是列表类型也

我们声明object Nil扩展TweetList有什么好处? 为什么不仍然使用类Nil呢

下面介绍如何使用singleton类

上面的评论也提到了这一点,但我再次解释

在scala中,对象声明用于单例对象。 在这种情况下,Nil的角色是表示“空”,并用作连续cons的最后参数

consa,Nil=>Lista consa,consb,Nil=>Lista,b 那么为什么Nil是对象并扩展列表呢?因为

Nil被用作列表空白的单一表示。 我们不需要多个Nil实例。
cons的第二个参数是列表类型也是有意义的。

内存效率。如果从一个类Nil创建多个实例都是相同的并且服务于相同的目的,那么从一个类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
}