Avatar ·

Quando usar tipo associado e quando usar parâmetro genérico em Rust?

Olá a todos! Comecei a estudar Rust e me deparei com uma dificuldade: não consigo entender em quais casos devo usar tipos associados (associated types) e em quais devo usar parâmetros genéricos comuns (generics). Por exemplo, estou escrevendo um trait para algum iterador ou coleção. Se eu quiser que a estrutura tenha um tipo de elemento, posso fazer assim: ```rust trait MyIterator { fn next(&mut self) -> Option; } ``` Ou assim: ```rust trait MyIterator { type Item; fn next(&mut self) -> Option; } ``` Ambas as opções parecem funcionar, mas ouvi dizer que há diferença em como elas são aplicadas na prática. Não está muito claro para mim: quando devo escolher uma forma e quando devo escolher a outra? Exemplo concreto: estou escrevendo um trait para figuras geométricas que têm área. Cada figura pode ter seu próprio tipo para representar coordenadas (por exemplo, `f32`, `f64` ou até números inteiros). Se eu fizer `trait Shape`, terei que especificar o tipo em todos os lugares. Mas se eu fizer `tra