仅供参考,我使用的是Rust 0.7。如何移动指针
我想创建一个使用拥有链表的堆栈实现,我遇到了麻烦。
trait Stack<T> {
fn push(&mut self, item : T);
fn pop(&mut self) -> Option<T>;
}
enum Chain<T> {
Link(T, ~Chain<T>),
Break
}
impl<T> Stack<T> for ~Chain<T> {
fn push(&mut self, item : T) {
*self = ~Link(item, *self);
}
fn pop(&mut self) -> Option<T> {
None
}
}
当我尝试rustc stack.rs
我得到以下错误:
stack.rs:13:28: 13:34 error: cannot move out of dereference of & pointer
stack.rs:13 *self = ~Link(item, *self);
^~~~~~
我不知道我是怎么克服这个还是我能做什么不同,让这一点。看起来我应该能够创建这个数据结构而不使用托管指针,但是我还没有看到很多这方面的文档。 。
从自我(我认为包括建设一个新的东西出来,如在Link(item, *self)
implies a move的情况下
你应该实现对连锁''喜欢接受的答案的特质,但你可以通过使用类似保留您的想法'让尾部=的std :: UTIL ::代替(个体经营,断裂); std :: util :: replace(self,Link(item,〜tail));'当使用拥有的数据结构时,'replace'和'swap'函数是重要的工具。 –
u0b34a0f6ae