首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在实施“仿造人”时使用“`IntoIterator`”而不是“`Iterator`”?

为什么在实施“仿造人”时使用“`IntoIterator`”而不是“`Iterator`”?
EN

Stack Overflow用户
提问于 2018-02-25 18:59:38
回答 1查看 444关注 0票数 4

FromIterator特性在锈病病案中的示例实现如下:

代码语言:javascript
复制
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那么严格

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-25 19:08:23

from_iter是这样定义的吗?因为IntoIterator没有Iterator那么严格吗?

是。

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

在构建泛型函数时,最好将其需求最小化,即使其尽可能泛化。

当然,在以下两种方式之间有一种权衡:

  • 易用性:使用尽可能多的类型,
  • 易于实施。

对于孤立代码库中的一个单独的函数,它可能不值得优化,因为它很容易使用;对于标准库中的一个特性/功能,因为用户数量远远超过开发人员的数量(这个特定的部分),这种权衡强烈地有利于易用性。

由于从IntoIteratorIterator非常简单,因此对实现影响不大,所以很容易调用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48977251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档