Работая больше на FP in Scala пример, я пытался реализовать map
функции Option
черта, как показано ниже:Реализация карты на Варианте
sealed trait MyOption[+A] {
def map[B](f: A => B): Option[B] = this match {
case Some(a) => Some(f(a))
case _ => None
}
}
Однако время компиляции ошибки показать, если я правильно понимаю, что я не правильное соответствие шаблону для случая Some(A)
. Используя сопоставление шаблонов, как я могу написать первый случай, чтобы получить некоторые (A) значения, чтобы они совпадали?
>scalac MyOption.scala
MyOption.scala:3: error: constructor cannot be instantiated to expected type;
found : Some[A(in class Some)]
required: MyOption[A(in trait MyOption)]
case Some(a) => Some(f(a))
^
MyOption.scala:3: error: not found: value a
case Some(a) => Some(f(a))
^
two errors found
Вы смешиваете опцию и MyOption, возвращаемый тип карты MyOption # должен быть MyOption, а не Option. вы уверены, что некоторые, которые вы используете, являются MyOption, а не опцией? – stew