我有一个带有一些共享不可变数据的结构,另一个 利用该数据的结构。我想把它们捆绑在一起 一个结构因为它们在一起产生逻辑意义。但是,我 不明白我如何提供对象本身的引用 施工期间:
struct A {
v: i32,
}
struct B<'a> {
a: &'a A,
b: i32,
}
struct C<'a> {
a: A,
b: B<'a>,
}
fn main() {
C {
a: A { v: 13 },
b: B { a: &??, b: 17 },
}
}
答案 0 :(得分:2)
这根本无法用安全的Rust代码表示。
在这种情况下,您可能需要使用RefCell
之类的动态借用。
答案 1 :(得分:2)
扩展Chris&#39;回答,有两个问题需要解决:
覆盖(1)相对容易,例如,可以使用简单的&self.a
,将self
锚定在尽可能最外层的类型中;然而,覆盖(2)似乎要困难得多:结构中没有任何东西指向这种关系,因此借用self.a
并不明显。
如果没有将self.a
标记为借用,则会遇到大量不安全的行为,例如可能的破坏行为,而Rust的目的是为了清除这些行为。