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

我不明白这一点。因为这个错误经常发生在普通的类中。请告诉我为什么我遇到这个错误。

+1

在REPL中工作得很好。 –

我想解释只是困惑,因为它进口的幕后如下:

  • scala._
  • java.lang._
  • scala.Predef._

其中包括Option类及其亚型 - SomeNone。我刚刚重新命名了班级,一切正常:

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)