gpt4 book ai didi

iterator - 为什么 `FromIterator` 的实现使用 `IntoIterator` 而不是 `Iterator` ?

转载 作者:行者123 更新时间:2023-11-29 08:07:38 32 4
gpt4 key购买 nike

FromIterator trait 在 Rust docs 中的示例实现是:

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那样严格吗?

最佳答案

Is from_iter defined this way because IntoIterator is not as strict a requirement as Iterator?

是的。

IntoIteratorIterator 自动实现,因此是实现 IntoIterator 的类型集是那些实现 Iterator 的超集.

在设计通用函数时,最好将其要求降至最低,即,使其尽可能通用。

当然,需要权衡:

  • 易用性:适用于尽可能多的类型,
  • 易于实现

对于孤立代码库中的一个单独函数,可能不值得为易用性进行太多优化;对于标准库中的特性/函数,由于用户数量远远超过开发人员的数量(该特定部分),因此权衡强烈支持易用性。

自从 IntoIteratorIterator非常简单,因此不会对实现造成太大影响,调用起来很容易。

关于iterator - 为什么 `FromIterator` 的实现使用 `IntoIterator` 而不是 `Iterator` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977251/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com