Я начал изучать Rust, и я пытаюсь реализовать простые одномерные клеточные автоматы. Я хочу представить состояние автоматов (Board
) как структуру с размером и двумя разными векторами (одного размера). Я пробовал:Как поменять два поля структуры
struct Board {
n: usize,
cur: Vec<u32>,
next: Vec<u32>,
}
impl Board {
fn new(size: usize) -> Board {
Board {
n: size,
cur: vec![0;size],
next: vec![0;size],
}
}
}
Пока все хорошо. Я также могу мутировать оба вектора. Но я хочу, чтобы иметь возможность поменять оба вектора (или, вернее, их ссылки), такие как:
fn swap(&mut self) -> &Board {
let tmp = self.cur;
self.cur = self.next;
self.next = tmp;
self
}
Он выходит из строя, с cannot move out of borrowed content [E0507]
, который я думаю, что я могу понять. Я также попробовал mem::swap
, который я нашел в подобном названии вопроса без успеха.
Как я могу заставить этот пример работать? (Так как я новичок в Rust, не стесняйтесь предлагать другое представление данных).