Ну, проблема в несоответствии типов, потому что вы возвращаете либо String
, либо T
, которые, конечно, объединены в Any
.Вы не можете сказать, что собираетесь вернуть Option[T]
, а затем вернуть Option[String]
.
Кроме этого, упрощенная версия этого кода выглядит так:
class ARegex[T](regex: Regex, reform: Option[String => T]) {
def findFirst(input: String): Option[Any] =
regex findFirstIn input map { s => reform map (_(s)) getOrElse s }
}
Вы можетеверните Option[Either[String, T]]
, хотя.Код будет выглядеть так:
class ARegex[T](regex: Regex, reform: Option[String => T]) {
def findFirst(input: String): Option[Either[String, T]] =
regex findFirstIn input map { s => reform map (_(s)) toRight s }
}