如何在没有无用的分配的情况下实现Cons列表的开头?

时间:2019-05-11 03:46:44

标签: rust cons

我正在通过 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或其他方法?

0 个答案:

没有答案