Vec структур, вызывающих проблемы заимствования - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь построить структуру данных молекулы. Начиная со структуры 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, чего я не буду делать. Как я могу убедить Руста в этом?

Я ценю, что это может быть распространенной проблемой, но я недостаточно изучен, чтобы понять, что я должен искать, чтобы решить ее. Я просмотрел много документации по ссылкам, заимствованиям и срокам жизни, но я все еще не совсем уверен, что это за проблема, которую я пытаюсь решить, или она решаема таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...