我最近一直在阅读“Scala by Example”一书,其中作者创建了一个抽象类来表示一组具有两个子类(EmptySet 和 NonEmptySet)的整数“IntSet”,如下所示:
abstract class Stack[A] {
def push(x: A): Stack[A] = new NonEmptyStack[A](x, this)
def isEmpty: Boolean
def top: A
def pop: Stack[A]
}
class EmptyStack[A] extends Stack[A] {
def isEmpty = true
def top = error("EmptyStack.top")
def pop = error("EmptyStack.pop")
}
class NonEmptyStack[A](elem: A, rest: Stack[A]) extends Stack[A] {
def isEmpty = false
def top = elem
def pop = rest
}
我的问题是:这种将空容器表示为自己的类而不是创建一个具体类来处理空容器和非空情况的范例有多大用处?