rust docs中 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
那样严格要求吗?
1 回答
是 .
IntoIterator
自动为Iterator
实现,因此实现IntoIterator
的类型集是实现Iterator
的那些类型的超集 .在制作通用函数时,最好将其要求降至最低,即使其尽可能通用 .
当然,在以下方面需要权衡:
易用性:适用于尽可能多的类型,
易于实施 .
对于孤立代码库中的单独功能,可能不值得为易用性进行优化;对于标准库中的特征/功能,由于用户数远远超过开发者(这个特定部分)的数量,因此权衡强烈支持易用性 .
因为从
IntoIterator
到Iterator
是如此简单,因此不容易打电话 .