我是 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
结构中即可进行转换。