Я пытаюсь построить структуру данных молекулы. Начиная со структуры Atom
, молекула Vec
хранит все Atom
s (с их координатами, индексами и т. Д.). Я также хочу Bond
структуру, которая будет иметь пары Atom
структур, и другую Vec
, которая хранит все связи. Я сделаю то же самое для Angle
и так далее ...
После того, как в структурах данные не будут видоизменены, они просто будут использоваться для вычисления таких вещей, как длина связей с помощью методов, но яне могу понять, как обойти проблему владения.
mvp_molecule.rs
#[derive(Debug)]
struct Atom {
atomic_symbol: String,
index: i16,
}
#[derive(Debug)]
struct Bond {
atom_1: Atom,
atom_2: Atom,
}
pub fn make_molecule() {
let mut molecule = Vec::new();
let mut bonds = Vec::new();
let atom_1 = Atom {
atomic_symbol: "C".to_string(),
index: 0,
};
molecule.push(atom_1);
let atom_2 = Atom {
atomic_symbol: "H".to_string(),
index: 1,
};
molecule.push(atom_2);
let bond = Bond {
atom_1: molecule[0],
atom_2: molecule[1],
};
bonds.push(bond);
}
Я думаю, что проблема в том, что Rust думает, что я могу изменить Atom
, пока он находится вBond
, чего я не буду делать. Как я могу убедить Руста в этом?
Я ценю, что это может быть распространенной проблемой, но я недостаточно изучен, чтобы понять, что я должен искать, чтобы решить ее. Я просмотрел много документации по ссылкам, заимствованиям и срокам жизни, но я все еще не совсем уверен, что это за проблема, которую я пытаюсь решить, или она решаема таким образом.