首页 文章

为什么在Rust文档中实现`FromIterator`使用`IntoIterator`而不是`Iterator`?

提问于
浏览
2

rust docsFromIterator 特征的示例实现是:

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 回答

  • 1

    from_iter是这样定义的,因为IntoIterator不像Iterator那样严格要求吗?

    是 .

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

    在制作通用函数时,最好将其要求降至最低,即使其尽可能通用 .

    当然,在以下方面需要权衡:

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

    • 易于实施 .

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

    因为从 IntoIteratorIterator 是如此简单,因此不容易打电话 .

相关问题