選項型別

引數化型別的一個很好的例子是 Option 型別 。它基本上只是以下定義(在型別上定義了幾個更多方法):

sealed abstract class Option[+A] {
  def isEmpty: Boolean
  def get: A

  final def fold[B](ifEmpty: => B)(f: A => B): B =
    if (isEmpty) ifEmpty else f(this.get)

  // lots of methods...
}

case class Some[A](value: A) extends Option[A] {
  def isEmpty = false
  def get = value
}

case object None extends Option[Nothing] {
  def isEmpty = true
  def get = throw new NoSuchElementException("None.get")
}

我們還可以看到它有一個引數化方法 fold,它返回 B 型別的東西。