了解 Rust 中的通用迭代器



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

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

我发现自己迷失在第二行中。我该如何解释它?

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

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

所以from_iter是一个泛型函数,它的输入是SimpleLinkedList应该包含的任何项目的 iterable(IntoIterator(。

哪一个将是交互者

_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的项目。您只需遍历iter并将项目推送到SimpleLinkedList结构中即可进行转换。

相关内容

  • 没有找到相关文章

最新更新