Quando usar tipos associados e quando usar parâmetros genéricos (generics) em Rust?
Olá! Recentemente comecei a estudar Rust e não consigo entender um conceito. Eu entendo que existem traits com tipos associados (associated types) e traits com parâmetros genéricos (generic type parameters). Aqui estão exemplos:
```rust
// Tipo associado
trait Container {
type Item;
fn get(&self) -> Self::Item;
}
// Tipo genérico
trait Container {
fn get(&self) -> T;
}
```
À primeira vista, eles fazem quase a mesma coisa. Mas li que a escolha entre eles é uma decisão arquitetural importante. Quando escrevo alguma trait, não sei o que escolher. Por exemplo, tentei fazer uma trait para converter um tipo em outro — usei um parâmetro genérico. Depois, para uma trait "coleção" — usei um tipo associado. Mas por quê? Parece-me que, se uso um parâmetro genérico, posso fazer várias implementações para um mesmo tipo, enquanto com tipo associado só uma. Isso significa que parâmetros genéricos são sempre melhores? Ou existem casos em que tipos associados são preferíveis?