为什么是方法的返回类型,scala的下面代码中的类名?

时间:2017-03-28 12:52:13

标签: scala data-structures functional-programming

abstract class IntSet {
   def contains(x: Int): Boolean
   def incl(x: Int): IntSet
}

我正在学习Scala。为什么方法incl的返回类型是IntSet的类名?这是什么意思?

1 个答案:

答案 0 :(得分:1)

通常逻辑和函数式编程语言是声明性的(本身并不强制执行,但在大多数情况下,建议使用声明式样式)。这意味着您不会改变数据结构:您构建一个新的修改后的原始。因此,当您使用IntSet并且添加元素时,使用声明性语言,将其添加到IntSet,构建一个新的IntSet包含原始IntSet的所有元素和您添加的x元素。

因此incl返回IntSet的原因是原始的IntSet未被修改,因此构建了一个新的。{/ p>

通常在构建新的IntSet时,当然不会构建一个完整的新对象。由于原始IntSet不应更改,因此可以使用原始IntSet 的子结构。因此,声明性语言通常有自己的一组专用数据结构,例如finger tree

IntSet为例this implementation。我们看到的是:

object Empty extends IntSet {
  override def toString = "."
  def contains(x: Int): Boolean = false
  def include(x: Int): IntSet = new NonEmpty(x, Empty, Empty)
  def union(other: IntSet): IntSet = other
}

因此,当我们使用Empty IntSet对象时,我们include使用元素x,而不是更改对象,我们构建一个新的IntSetNonEmpty(x,Empty,Empty)。此IntSet包含x