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