Mam trudny czas ze zrozumieniem, dlaczego kompilator Scala jest niezadowolony z tej definicji funkcji:Funkcja który ogólnie zajmuje typu i zwraca ten sam typ
def trimNonWordCharacters[T <: Iterable[String]](items: T): T =
items map { _.replaceAll("\\W", "") }
Oto wynik REPL:
scala> def trimNonWordCharacters[T <: Iterable[String]](items: T): T =
items map { _.replaceAll("\\W", "") }
<console>:5: error: type mismatch;
found : Iterable[java.lang.String]
required: T
def trimNonWordCharacters[T <: Iterable[String]](items: T): T = items map { _.replaceAll("\\W", "") }
Celem jest przekazanie dowolnej implementacji Iterable i uzyskanie tego samego typu wycofania. czy to możliwe?
Duplikat http://stackoverflow.com/questions/8235462/returning-original-collection-type-in-generic -method –
@LuigiPlinge To pytanie nie wymagało 'CanBuildFrom', ponieważ' filter' nie wymaga tego. To pytanie jest bardzo podobne, a __________ tego pytania z pewnością je pokrywa, ale tutaj potrzeba trochę więcej, aby to zadziałało. –