我尝试再次重新实现scala中的Some和None用于学习目的。我在scala工作区中执行以下所有代码。
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
}
}
我遇到以下错误:
无法解析方法名称unapply
我不明白这一点。因为此错误通常仅在正常类中发生。请告诉我为什么遇到这个错误。
答案 0 :(得分:4)
我猜解释器只是混淆了,因为它在场景后面导入了以下内容:
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)