【发布时间】:2014-01-16 02:42:25
【问题描述】:
我想我会通过实现一些非常简单的结构和算法来深入研究 Rust,我从一个链表开始。事实证明,事情并没有那么简单。到目前为止,这是我的代码:
enum List<T>
{
Node(T, ~List<T>),
Nil
}
impl<T> List<T>
{
fn new(vector: &[T]) -> List<T> { Nil }
fn add(&mut self, item: T)
{
let tail = self;
loop
{
match *tail
{
Node(_, ~ref next) => tail = next,
Nil => break
}
}
*tail = Node(item, ~Nil);
}
}
这不会编译,因为由于不兼容的可变性, next 无法在 match 语句中分配给 tail。我知道这可以使用垃圾回收指针轻松完成,但这违背了练习的教育目的:我想知道如何在没有 Gc 或 Rc 指针的情况下做到这一点。
【问题讨论】:
标签: rust