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那么严格
发布于 2018-02-25 19:08:23
from_iter是这样定义的吗?因为IntoIterator没有Iterator那么严格吗?
是。
IntoIterator是为Iterator自动实现的,因此实现IntoIterator的类型集是实现Iterator的那些类型的超集。
在构建泛型函数时,最好将其需求最小化,即使其尽可能泛化。
当然,在以下两种方式之间有一种权衡:
对于孤立代码库中的一个单独的函数,它可能不值得优化,因为它很容易使用;对于标准库中的一个特性/功能,因为用户数量远远超过开发人员的数量(这个特定的部分),这种权衡强烈地有利于易用性。
由于从IntoIterator到Iterator非常简单,因此对实现影响不大,所以很容易调用。
https://stackoverflow.com/questions/48977251
复制相似问题