Я делаю некоторые изменения проблемы dining philosophers из книги Руста.Использование элемента списка для редактирования списка
В книге они создают всех философов вручную, при этом последний имеет свою левую и правую руку. Я сделал это программно (используя цикл for, к которому я подтолкнул философов), и теперь я хочу изменить окончательного философа.
Это то, что я хочу сделать
// make the last philosopher left handed (switch forks)
let p = &philosophers[length - 1];
philosophers[length - 1] = Philosopher{left: p.right, right: p.left, name: p.name.clone()};
// error: cannot move out of indexed content [E0507]
Это то, что я должен сделать
philosophers[length - 1] = Philosopher{
left: philosophers[length - 1].right,
right: philosophers[length - 1].left,
name: philosophers[length -1].name.clone(),
};
Первый пример не компилируется, и я не могу найти способ получить его скомпилировать, не делая что-то вроде let p = philosophers[length - 1].clone()
- который полностью копирует данные! (не совсем то, что я хочу).
Есть ли способ сделать это более ржаво?
Я пошел вперед и удалил ответ с вопроса; если я удалю некоторый контент, который вы хотите получить (например, чтобы опубликовать свой собственный ответ, если вы думаете, что ваш код лучше, чем Lukas), вы можете нажать «отредактированный X время назад», который ссылается на страницу [ревизий] https://stackoverflow.com/posts/34627695/revisions) для вашего вопроса и захватить все, что от вас требуется. –