Generics 理解Rust中的泛型from迭代器

Generics 理解Rust中的泛型from迭代器,generics,rust,linked-list,iterator,traits,Generics,Rust,Linked List,Iterator,Traits,我是新手,我发现自己迷失在这第二条线上。我怎么解释呢?哪一个是我可以用来转换到SimpleLink列表的interator 我发现自己迷失在第二行。我怎么解释呢 什么部分?from_iter被定义为一个在类型I上参数化的泛型函数。然后该类型就有界,这意味着它必须在迭代器中实现 IntoIterator意味着该类型可以被迭代转换为迭代器并生成T。在其他语言的行话中,它是T的iterable 所以from_iter是一个泛型函数,它的输入是SimpleLinkedList应该包含的任何项的itera

我是新手,我发现自己迷失在这第二条线上。我怎么解释呢?哪一个是我可以用来转换到SimpleLink列表的interator

我发现自己迷失在第二行。我怎么解释呢

什么部分?from_iter被定义为一个在类型I上参数化的泛型函数。然后该类型就有界,这意味着它必须在迭代器中实现

IntoIterator意味着该类型可以被迭代转换为迭代器并生成T。在其他语言的行话中,它是T的iterable

所以from_iter是一个泛型函数,它的输入是SimpleLinkedList应该包含的任何项的iterable不可迭代器

哪一个会是interator

_iter.into_iter将是输入迭代器。您还可以使用for循环在iter上迭代,因为它使用IntoIterator特性隐式地将其RHS转换为迭代器

我发现自己迷失在第二行。我怎么解释呢

什么部分?from_iter被定义为一个在类型I上参数化的泛型函数。然后该类型就有界,这意味着它必须在迭代器中实现

IntoIterator意味着该类型可以被迭代转换为迭代器并生成T。在其他语言的行话中,它是T的iterable

所以from_iter是一个泛型函数,它的输入是SimpleLinkedList应该包含的任何项的iterable不可迭代器

哪一个会是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
    }
}

要知道的关键是,实现该特性的类型可以用于for循环。Item=T只是意味着迭代器返回类型为T的项。您只需在iter上进行迭代,然后将这些项推送到SimpleLinedList结构中进行转换。

一开始看起来很吓人,但实现非常简单

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
    }
}

要知道的关键是,实现该特性的类型可以用于for循环。Item=T只是意味着迭代器返回类型为T的项。您只需在iter上进行迭代,并将这些项推送到SimpleLinedList结构中进行转换。

另外,非常有用!谢谢你的回答,也非常有用!谢谢你的回答