如何提供一个指向兄弟结构体的引用?

3
我有一个带有一些共享不可变数据的结构,还有另一个使用该数据的结构。我想将它们捆绑成一个结构,因为它们在逻辑上是相关的。但是,在构造过程中,我不知道如何提供对对象本身的引用:
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 },
    }
}
2个回答

4
扩展Chris的答案,有两个问题需要解决:
  1. 有一个语法,无歧义地允许引用同级
  2. 使借用规则仍然可以得到验证
覆盖(1)相对容易,比如可以使用简单的&self.a,将self锚定在最外层类型中;但是覆盖(2)似乎要困难得多:结构本身没有指向这种关系的任何东西,因此self.a未被标记为借用不明显。
如果没有将self.a标记为借用,则会遇到许多不安全的行为,例如可能的破坏性行为,而Rust的设计目标是避免这些行为。

3

这在安全的Rust代码中无法表示。

在这种情况下,您可能需要使用像RefCell这样的动态借用。


我已经使用了RefCell,但您能否提供一个小例子来说明我如何在这种情况下使用它?我需要重写B以利用它吗?如果是这样,那么如果B是由外部源提供的呢? - Shepmaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接