2017-02-24 33 views
1

我嘗試再次重新實現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中工作得很好。 –

回答

4

我想解釋只是困惑,因爲它進口的幕後如下:

  • 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)