Po prostu spojrzałem na deklarację List.flatMap
i byłem trochę zaskoczony tym.Zrozumienie deklaracji flatMap na liście
final override def flatMap[B, That](f: A => GenTraversableOnce[B])
(implicit bf: CanBuildFrom[List[A], B, That]): That
Gdzie object List
określa:
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] =
ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
Jeśli więc powołać flatMap
na List
otrzymamy List
i nie widzę żadnego sensu w That
typu, jeżeli będzie to zawsze można wywnioskować do List[B]
(z powodu implicit
).
że 'może być przesłonięta implicit' o bardziej lokalnym jednego, który opiera się na, powiedzmy, od' Vector' lub jawnie przekazany jako parametr – Chirlo
Zobacz http: // stackoverflow .com/a/1728140/5344058 na przykład, kiedy przydatne jest posiadanie 'To' będącego innego typu w porównaniu do oryginalnej kolekcji –
Czy widziałeś kiedyś' collection.breakout' z płaską mapą lub mapą ... to jest jeden przykład przesłaniania tego niejawnego. –