rust - 如何在没有无用分配的情况下实现 Cons 列表前置?
问题描述
我正在阅读Testcase: linked-list in Rust by Example。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
to分配self
。有没有更好的方法来做到这一点,也许使用mem::replace
或其他?
解决方案
推荐阅读
- hadoop - Cloudera 沙盒 2.6.5 不保存设置
- xml - 如何打印 x:include 层次结构
- tensorflow - 如何在 CNN 和 LSTM 架构中添加 dropout 来处理过拟合问题,TensorFlow
- java - 我如何在 Spring 中对 GET 请求使用复杂的验证条件
- python - 在 3D 图中可视化排列面体
- python - scikit学习管道中交叉验证中的混淆矩阵
- android - 具有交替模板的 RecyclerView(如 CSS 中的 EVEN 和 ODD)
- flutter - 自定义 AppBar 元素类型 'List
' 不能分配给列表类型 - android - 如何找到使用 MediaStore API 添加媒体文件的可用空间?
- java - 获取月份的最后日期