为什么在链接列表上调用into_iter时不会移动self?

时间:2016-07-02 14:09:24

标签: rust

在书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是否特殊并且不遵守移动或借用的通用规则? IntoIterList之间的关系是什么?

1 个答案:

答案 0 :(得分:2)

self参数特殊(以任何方式与此问题相关)。移动了into_iter被称为的对象。此外,在该方法中,变量self随后会移动到IntoIter结构中,就像此示例中的任何x一样:

fn into_iter_external<T>(x: List<T>) -> IntoIter<T> {
    IntoIter(x)
}