我正在练习我在阅读 The Book 时学到的 Rust 概念。我已经能够List通过复制Box并将 分配list给复制的框来迭代我的枚举,但直觉上,我觉得必须有一种方法可以“使其指向行中的下一个指针”。
如果我尝试在没有 的情况下执行此操作bx.clone(),例如:self.list = **bx,我会“无法从**bx可变引用后面移出”。这意味着我需要拥有它,但我无法拥有bx它,因为当我在if let.
是否可以或建议在不复制的情况下移动引用?
#[derive(Clone)]
enum List {
Cons(u32, Box<List>),
Nil,
}
struct ListHolder {
list: List,
}
impl Iterator for ListHolder {
type Item = u32;
fn next(&mut self) -> Option<u32> {
if let Cons(num, bx) = &mut self.list {
let val = *num;
self.list = *bx.clone(); // This is the key line
Some(val) …Run Code Online (Sandbox Code Playgroud) rust ×1