在书中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
之间有什么关系?
最佳答案
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/