导致借用问题的结构的Vec

时间:2019-10-23 13:17:47

标签: struct rust

我正在尝试建立分子数据结构。从Atom结构开始,分子Vec存储所有Atom(及其坐标和索引等)。我还想要一个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,而我不会这样做。我怎样才能说服Rust呢?

我知道这可能是一个普遍的问题,但是我学到的知识不足以意识到我应该寻找解决的办法。我浏览了很多有关引用,借用和生命周期的文档,但是我仍然不确定我要解决的问题是什么,或者是否可以通过这种方式解决。

0 个答案:

没有答案