在书Learning Rust With Entirely Too Many Linked Lists中,它试图为列表创建一个迭代器:
pub struct IntoIter<T>(List<T>);
impl<T> List<T> {
pub fn into_iter(self) -> IntoIter<T> {
IntoIter(self)
}
}
为什么self
没有移动? self
参数是pub fn into_iter(self)
是引用还是值? self
是否特殊并且不遵守移动或借用的通用规则? IntoIter
和List
之间的关系是什么?
答案 0 :(得分:2)
self
参数不特殊(以任何方式与此问题相关)。移动了into_iter
被称为的对象。此外,在该方法中,变量self
随后会移动到IntoIter
结构中,就像此示例中的任何x
一样:
fn into_iter_external<T>(x: List<T>) -> IntoIter<T> {
IntoIter(x)
}