У меня есть неявный класс для добавления определенной функции для класса case, например:
case class TestClass(name:String)
implicit class ChangeProduct[S <: Seq[T], T <: Product](seq: Option[Seq[T]]) {
def convert(expr: T => T): Option[Seq[T]] = seq.map(_.map(expr))
}
val c = Option(List(TestClass("a"), TestClass("b")))
val r = c.convert(p => p.copy(name = p.name.toUpperCase()))
println(r)
Я рад видеть, что на выходе получается
Some(List(TestClass(A), TestClass(B)))
Но теперь я пытаюсь сделать неявный класс более универсальным, изменив его параметр на seq:Option[S]
:
implicit class ChangeProduct[S <: Seq[T], T <: Product](seq: Option[S]) {
def convert(expr: T => T): Option[S] = seq.map(_.map(expr))
}
val c = Option(List(TestClass("a"), TestClass("b")))
val r = c.convert(p => p.copy(name = p.name.toUpperCase()))
println(r)
К сожалению, я получил сообщение об ошибке:
Error:(37, 51) type mismatch;
found : Seq[T]
required: S
def convert(expr: T => T): Option[S] = seq.map(_.map(expr))
И для выражения p.copy(name = p.name.toUpperCase())
было сказано
Type mismatch.
Required: Nothing => Nothing
Found : Nothing => Any
Я думаю, что это может быть проблема стирания типа, но я не знаю, как ее исправить.