的示例实现FromIterator
特质在Rust 文档 https://doc.rust-lang.org/std/iter/trait.FromIterator.html is:
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
.
Is from_iter
这样定义是因为IntoIterator
的要求并不像Iterator
?
Is from_iter
这样定义是因为IntoIterator
的要求并不像Iterator
?
Yes.
IntoIterator
自动实现为Iterator
,因此实现的类型集IntoIterator
是那些实现的超集Iterator
.
在设计通用函数时,最好尽量减少其要求,即使其尽可能通用。
当然,两者之间需要权衡:
对于孤立的代码库中的一个单独的函数,可能不值得为了易用性而进行太多优化;对于标准库中的特征/功能,由于用户数量远远超过(该特定部分的)开发人员数量,因此权衡强烈支持易用性。
自从从IntoIterator
to Iterator
非常简单,因此对实现影响不大,调用起来很容易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)