Scala:在模式匹配中无法解决case类中的方法错误
问题描述:
我尝试再次重新实现Scala中的Some和None以用于学习目的。我在scala工作区中完成以下所有代码。Scala:在模式匹配中无法解决case类中的方法错误
case class Some[+A](get: A) extends Option[A]
case object None extends Option[Nothing]
trait Option[+A] {
def map[B](f: A => B): Option[B] = this match {
case None => None
case Some(a) => Some(f(a)) // error here
}
}
我遇到以下错误:
Cannot resolve method name unapply
我不明白这一点。因为这个错误经常发生在普通的类中。请告诉我为什么我遇到这个错误。
答
我想解释只是困惑,因为它进口的幕后如下:
scala._
java.lang._
scala.Predef._
其中包括Option
类及其亚型 - Some
和None
。我刚刚重新命名了班级,一切正常:
trait Optional[+A] {
def map[B](f: A => B): Optional[B] = this match {
case Absent => Absent
case Present(a) => Present(f(a))
}
}
case class Present[+A](get: A) extends Optional[A]
case object Absent extends Optional[Nothing]
Present(3).map(_ * 2) // Present(6)
在REPL中工作得很好。 –