2016-01-10 3 views
1

Я новичок в Scala и работаю через эту книгу (Function Programming in Scala). Одно из упражнений включает в себя повторение функции Option и ее функций. Однако у меня возникла проблема с компиляцией моего решения в REPL.Функция соответствия типа Scala внутри тела признаков

sealed trait Nullable[+A] { 

    def get[B >: A](default: => B) : B = this match { 
     case Value(v) => v 
     case Null => default 
    } 
} 
case class Value[+A](value: A) extends Nullable[A] 
case object Null extends Nullable[Nothing] 

сведение об ошибке РЕПЛА:

error: constructor cannot be instantiated to expected type; 
found : Value[A(in class Value)] 
required: Nullable[A(in trait Nullable)] 
      case Value(v) => v 

error: pattern type is incompatible with expected type; 
found : Null.type 
required: Nullable[A] 
      case Null => default 

На основании этих ошибок у меня есть мучительное чувство, что компилятор не может сделать вывод о том, что тип this (будучи шаблона соответствует на) является Nullable.

Я пробовал этот блок кода в этом режиме Scala utility и, похоже, компилируется и запускается. Единственное различие, которое я вижу, это то, что онлайн-инструмент использует версию Scala версии 2.10.3, и я бегу 2.11.7

Поэтому я не уверен, является ли это экологическим, или мне нужно помочь компилятору Scala здесь , Я также попытался скомпилировать answer от авторов книги, и я получаю те же ошибки.

Любая помощь будет высоко оценена.

+1

При использовании repl используйте ': paste' для ввода многострочного кода scala, который должен исправить вашу проблему. – Noah

+0

Да, @ Ноах прав. REPL (2.11.7) компилирует его просто отлично при вставке в виде блока (т. Е. ': Pa'). – jwvh

+0

Выполняется ли это, если я использую команду ': load' для загрузки файла .scala? – MtEdenCodeLab

ответ

0

Публикация ответа в случае, если у кого-то еще есть аналогичная проблема.

Используйте команду REPL :paste для загрузки файла .scala вместо команды :load.

Благодарим вас за @noah и @jwvh за помощь.

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