我正在通过 Rust by Example 中的Testcase: linked-list。 RBE通过向prepend
传递值来实现self
方法:
fn prepend(self, elem: u32) -> List {
// `Cons` also has type List
Cons(elem, Box::new(self))
}
并将其称为:
list = list.prepend(1);
list = list.prepend(2);
list = list.prepend(3);
我想使用&mut self
而不是一遍又一遍地分配list
,就像这样:
list.prepend("asd");
list.prepend("def");
list.prepend("jkl");
我尝试过:
enum LinkedList<T> {
Cons(T, Box<LinkedList<T>>),
Nil
}
impl<T> LinkedList<T> where T: Copy {
fn prepend(&mut self, value: T) {
let tail = mem::replace(self, Nil);
*self = Cons(value, Box::new(tail));
}
}
这有效,但是我正在将Nil
分配给self
。是否有更好的方法可以执行此操作,也许使用mem::replace
或其他方法?