Quand utiliser les types associés et quand utiliser les paramètres génériques en Rust ?
Bonjour ! J'ai récemment commencé à apprendre Rust et je n'arrive pas à comprendre un concept. Je comprends qu'il existe des traits avec des types associés (associated types) et des traits avec des paramètres génériques (generic type parameters). Voici des exemples :
```rust
// Type associé
trait Container {
type Item;
fn get(&self) -> Self::Item;
}
// Type générique
trait Container {
fn get(&self) -> T;
}
```
À première vue, ils font presque la même chose. Mais j'ai lu que le choix entre eux est une décision architecturale importante. Quand j'écris un trait, je ne comprends pas quoi choisir. Par exemple, j'ai essayé de faire un trait pour convertir un type en un autre — j'ai pris un paramètre générique. Ensuite, pour un trait "collection" — j'ai pris un type associé. Mais pourquoi ? Il me semble que si j'utilise un paramètre générique, je peux faire plusieurs implémentations pour un même type, alors qu'avec un type associé, je n'en ai qu'une. Est-ce que cela signifie que les paramètres génériques sont toujours meilleurs ? Ou y a-t-il des cas où les types associés sont préférables ?