4

Coursera のコースでMartin Odesrky 教授は、ポリモーフィズムとパラメータ化されたクラスに関する講義の例として、連結リストを使用しています。

package week4

trait List[T] {
  def isEmpty: Boolean
  def head: T
  def tail: List[T]
}
class Cons[T](val head: T, val tail: List[T]) extends List[T] {
  def isEmpty = false
}
class Nil[T] extends List[T] {
  def isEmpty = true
  def head = throw new NoSuchElementException("Nil.head")
  def tail = throw new NoSuchElementException("Nil.tail")
}
object Main extends App {
  def main(args: Array[String]) {
    val lst = new Cons("A", new Cons("B", new Cons("C", new Nil())))
  }
}

気になるのは、最後の行でのクラス Nil のインスタンス化ですnew Nil()

objectNil をScala クラスではなくとして定義し、パラメータ化された型 List[T] に準拠させるにはどうすればよいでしょうか?

次のコード行のようにオブジェクト Nil を参照し (インスタンス化なし)、正しい型にしたいと思います。

new Cons("A", new Cons("B", new Cons("C", Nil)))
4

3 に答える 3