rust - 为什么在链表上调用 into_iter 时 self 不移动?

标签 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 之间有什么关系?

最佳答案

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

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

关于rust - 为什么在链表上调用 into_iter 时 self 不移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161061/

相关文章:

string - 在 Rust 中检查字符串是否以数字开头的更简单方法?

authentication - 有没有一种在 Actix 路由级别实现身份验证/授权检查的好方法?

使用rust E0061 : Some(A) is not the same as Some(match . .. =>A)

rust - 如何将套接字作为参数传递给在线程中调用的函数?

loops - 循环时,.iter() 与引用 (&) 有何不同?

c - 生成 C header 时隐藏 Rust 库的私有(private)字段

rust - 为什么 Rust 中的 Cell 只能用于 Copy 而不能用于 Clone 类型?

rust - 如何在稳定的 Rust 中在不占用堆栈空间的情况下在堆上分配结构?

rust - 盒装特征创建背后的机制如何运作?

generics - 具有标记特征的Rust meta/复合结构