我如何提供对兄弟结构的引用?

时间:2014-10-13 22:19:01

标签: rust

我有一个带有一些共享不可变数据的结构,另一个 利用该数据的结构。我想把它们捆绑在一起 一个结构因为它们在一起产生逻辑意义。但是,我 不明白我如何提供对象本身的引用 施工期间:

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 个答案:

答案 0 :(得分:2)

这根本无法用安全的Rust代码表示。

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

答案 1 :(得分:2)

扩展Chris&#39;回答,有两个问题需要解决:

  1. 的语法明确允许引用兄弟
  2. 使其仍然可以验证借用规则
  3. 覆盖(1)相对容易,例如,可以使用简单的&self.a,将self锚定在尽可能最外层的类型中;然而,覆盖(2)似乎要困难得多:结构中没有任何东西指向这种关系,因此借用self.a并不明显。

    如果没有将self.a标记为借用,则会遇到大量不安全的行为,例如可能的破坏行为,而Rust的目的是为了清除这些行为。