模式匹配类型错误

时间:2017-02-10 10:21:04

标签: scala intellij-idea

以下是IntelijIDEA中的map1.scala文件

我似乎又一次撞墙了。我不知道为什么以下是错误:

abstract class List[T] {
   def map[U](f: T => U): List[U] = {
     this match {
       case Nil => this
       case x :: xs => ???
     }
   }
 }

case Nil:模式类型与预期类型不兼容:找到Nil.type expected List [T] this:类型List [T]的表达式不符合预期类型List [U] x :: xs模式类型不兼容发现:: B必需列表[T] ..

我尝试了一切......但仍然有这个问题。不过知道请回复。

1 个答案:

答案 0 :(得分:2)

实际上您的代码存在一些问题:

  • List的不变类型参数T
  • 不存在的对象Nil
  • 缺席运营商::
  • 缺席对象::使用unapply函数

试试这个:

abstract class List[+A]
  def head: A
  def tail: List[A]

  def map[B](f: A => B): List[B] = 
    if (this == Nil) Nil 
    else new ::(f(head), tail map f)
}

case object Nil extends List[Nothing] {
  def head = ??? // not interested in throwing more appropriate exception
  def tail = ???
} 

case class ::[T](head: T, tail: List[T]) extends List[T]

然后你可以使用它

(1 :: 2 :: 3 :: Nil).map(_.toString)