何时在Rust中使用关联类型,何时使用泛型参数?
大家好!我开始学习Rust时遇到了一个困难:无法理解在什么情况下应该使用关联类型(associated types),什么情况下使用普通的泛型参数(generics)。
例如,我在为某个迭代器或集合编写trait。如果我希望结构体有一个元素类型,我可以这样做:
```rust
trait MyIterator {
fn next(&mut self) -> Option;
}
```
或者这样:
```rust
trait MyIterator {
type Item;
fn next(&mut self) -> Option;
}
```
看起来两种方式都能工作,但我听说它们在实际应用中有区别。我不太明白:什么时候应该选择一种方式,什么时候选择另一种?
具体例子:我正在为几何图形编写一个trait,这些图形有面积。每个图形可能有自己的坐标类型(例如`f32`、`f64`甚至整数)。如果我使用`trait Shape`,那么我必须在任何地方指定类型。而如果我使用关联类型...