Я думал, что буду погружаться в Rust, внедряя некоторые очень простые структуры алгоритмов &, я начал со связанного списка. Оказывается, это не так просто. Это мой код до сих пор: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);
}
}
Это не будет компилироваться, потому что рядом не может быть отнесено к хвосту в отчете матча из-за несовместимости изменчивости. Я знаю, что это можно легко сделать, используя указатели, собранные с мусором, но такие поражения уходят в образовательную цель упражнения: я хотел бы знать, как это сделать без указателей Gc или Rc.
Спасибо! Да, была петля, но я шел туда и обратно между петлей и рекурсивным подходом, и я думаю, в какой-то момент я ее потерял. Будет редактировать. – kralyk