2016-11-30 3 views
0

Я пытаюсь запустить код из книги «Функциональное программирование в Scala», который, как представляется, сделан для старой версии scala (скачать с here). tmp.scala:Соответствие шаблону подкласса Scala

sealed trait Option[+A] 
case class Some[+A](get: A) extends Option[A] 
case object None extends Option[Nothing] 

trait Option[+A] { 
    /* returns None if None, or function applied to the some object */ 
    def map[B](f: A => B): Option[B] = this match { 
     case None => None 
     case Some(a) => Some(f(a)) 
    } 
} 

Ошибки это броски:

$ scala 
Welcome to Scala 2.12.0-20161021-070700-8684ae8 (OpenJDK 64-Bit Server VM, Java 1.8.0_112). 
scala> :load tmp.scala 

tmp.scala:17: error: pattern type is incompatible with expected type; 
found : None.type 
required: Option[A] 
      case None => None 
       ^
tmp.scala:17: error: type mismatch; 
found : None.type 
required: Option[B] 
      case None => None 
         ^
tmp.scala:18: error: constructor cannot be instantiated to expected type; 
found : Some[A(in class Some)] 
required: Option[A(in trait Option)] 
      case Some(a) => Some(f(a)) 
       ^
tmp.scala:18: error: type mismatch; 
found : Some[B] 
required: Option[B] 
      case Some(a) => Some(f(a)) 
           ^

Я пробовал все виды codefu на это, но безрезультатно, это кажется, что это не обнаруживает подклассы должным образом из-за устаревшей синтаксис?

+1

Характеристика 'Option' выше определена дважды. –

+0

Спасибо @Michael Zajac, я удалил первую декларацию (хотя и ту же ошибку). – cirne

+0

Он компилируется просто отлично для меня. Где вы пытаетесь скомпилировать это? В файле или REPL? Какая версия Scala (хотя я не думаю, что это должно иметь значение)? –

ответ

3

Используйте :paste file.scala, который вставляет содержимое, а не :load file.scala, что интерпретирует каждую строку.

+0

Это решает, спасибо! – cirne

Смежные вопросы