我正在尝试建立分子数据结构。从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呢?
我知道这可能是一个普遍的问题,但是我学到的知识不足以意识到我应该寻找解决的办法。我浏览了很多有关引用,借用和生命周期的文档,但是我仍然不确定我要解决的问题是什么,或者是否可以通过这种方式解决。