我在看
scala.collection.immutable.ListSet[T]
实施了at 2.12,并对其工作原理有疑问:
sealed class ListSet[A] extends AbstractSet[A]
with Set[A]
with GenericSetTemplate[A, ListSet]
with SetLike[A, ListSet[A]]
with Serializable {
def +(elem: A): ListSet[A] = new Node(elem)
//...
protected class Node(override protected val elem: A) extends ListSet[A] with Serializable {
override def +(e: A): ListSet[A] = if (contains(e)) this else new Node(e)
//...
}
}
Node.+(e: A)
只需使用给定元素创建一个新节点。如何引用
Node
在其中
+
next
方法实现为
override protected def next: ListSet[A] = ListSet.this
它应该给我们一个关于初始空值的参考
ListSet
实例。
你能解释一下这是怎么工作的吗?