Я новичок в 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 от авторов книги, и я получаю те же ошибки.
Любая помощь будет высоко оценена.
При использовании repl используйте ': paste' для ввода многострочного кода scala, который должен исправить вашу проблему. – Noah
Да, @ Ноах прав. REPL (2.11.7) компилирует его просто отлично при вставке в виде блока (т. Е. ': Pa'). – jwvh
Выполняется ли это, если я использую команду ': load' для загрузки файла .scala? – MtEdenCodeLab