Dla odniesienia używam Rust 0.7.Jak przenieść posiadany wskaźnik
Próbuję utworzyć implementację stosu za pomocą posiadanej listy połączonej i mam problemy.
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
}
}
Kiedy próbuję rustc stack.rs
pojawia się następujący błąd:
stack.rs:13:28: 13:34 error: cannot move out of dereference of & pointer
stack.rs:13 *self = ~Link(item, *self);
^~~~~~
nie wiem jak mogłem przezwyciężyć lub co mogłem zrobić inaczej na to pozwolić. Wygląda na to, że powinienem móc stworzyć tę strukturę danych bez korzystania z zarządzanych wskaźników, ale nie widziałem zbyt wiele dokumentacji na ten temat. .
należy wdrożyć cechę na '' Łańcucha jak zaakceptowanej odpowiedzi, ale można zachować swój pomysł za pomocą coś jak 'niech ogon = std :: util :: zastąpić (self, break); std :: util :: replace (self, Link (item, ~ tail)); 'Funkcje' replace' i 'swap' są ważnymi narzędziami podczas pracy z własnymi strukturami danych. –
u0b34a0f6ae