[{3}}中FromIterator
特征的示例实现是:
impl FromIterator<i32> for MyCollection {
fn from_iter<I: IntoIterator<Item=i32>>(iter: I) -> Self {
let mut c = MyCollection::new();
for i in iter {
c.add(i);
}
c
}
}
FromIterator
定义了如何从迭代器创建类型。 from_iter
的签名需要一个实现IntoIterator
的类型,该类型定义了如何将类型转换为Iterator
。
from_iter
是这样定义的,因为IntoIterator
并不像Iterator
那样严格要求吗?
答案 0 :(得分:2)
from_iter
是这样定义的,因为IntoIterator
并不像Iterator
那样严格要求吗?
是
IntoIterator
会自动为Iterator
实施,因此实施IntoIterator
的类型集是实施Iterator
的超集。
在制作通用功能时,最好尽量减少其要求,即尽量使其尽可能通用。
当然,需要在以下方面进行权衡:
对于孤立代码库中的单独功能,可能不值得为易用性进行优化;对于标准库中的特征/功能,由于用户数远远超过开发者(这个特定部分)的数量,因此权衡强烈支持易用性。
由于从IntoIterator
转到Iterator
非常简单,因此对实施并不重要,因此可以轻松打电话。