理解 Rust 中的通用 FromIterator

Understanding Generic FromIterator in Rust

我是 Rust 的新手,我发现自己迷失在第二行中。我该如何解释它?哪个是我可以用来转换为 SimpleLinkedList 的交互器?

impl<T> FromIterator<T> for SimpleLinkedList<T> {
    fn from_iter<I: IntoIterator<Item = T>>(_iter: I) -> Self {
        unimplemented!()
    }
}

I found myself lost in this second line. How can I interpreted it?

什么部分? from_iter 被定义为在类型 I 上参数化的泛型函数。然后该类型受限(意味着它必须实现)IntoIterator<Item=T>.

IntoIterator<Item=T> 表示类型可以迭代(转换为 Iterator)并产生 T。在其他语言的行话中,它是 Ts.

的一个 iterable

所以 from_iter 是一个通用函数,其输入是 SimpleLinkedList 应包含的任何项目的迭代ble (IntoIterator)。

Which one would be the interator

_iter.into_iter() 将是输入迭代器。您也可以使用 for 循环在 _iter 上进行迭代,因为它使用 IntoIterator 特征将其 RHS 隐式转换为迭代器。

初看起来很吓人,但实现起来非常简单。

impl<T> FromIterator<T> for SimpleLinkedList<T> {
    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
        let mut list = SimpleLinkedList::new();
        for item in iter {
            list.push(item);
        }
        list
    }
}

要知道的关键是实现特征 IntoIterator 的类型可以在 for-in 循环中使用。 Item = T 仅表示 T 类型的迭代器 returns 项。您只需遍历 iter 并将项目推送到您的 SimpleLinkedList 结构中即可进行转换。