首先,我想为这个noob问题表示歉意,并指定一个非特定的标题,我对Rust很陌生。带有其他结构的不可变引用的结构
无论如何,这里是一些(工作)代码:
struct A {
data: i32
}
struct B<'s> {
a: &'s A
}
impl<'s> B<'s> {
fn new(reference: &'s A) -> B<'s> {
B {
a: reference
}
}
}
fn main() {
let a1 = A{data: 0};
let b1 = B::new(&a1);
let b2 = B::new(&a1);
}
有一个与一些数据,并包含一个不变的参考A.在main方法几个B-对象是一个结构B中的结构甲通过引用单个A对象创建。
现在我只想改变一件事:在B :: new()方法中,我想在使用它作为B的不可变成员之前修改'reference'的数据。我试过这样:
struct A {
data: i32
}
struct B<'s> {
a: &'s A
}
impl<'s> B<'s> {
fn new(reference: &'s mut A) -> B<'s> {
// Modify data
reference.data += 1;
B {
a: reference
}
}
}
fn main() {
let mut a1 = A{data: 0};
let b1 = B::new(&mut a1);
let b2 = B::new(&mut a1);
}
但编译器不会让我,错误:不能借用a1
作为多次可变的一次。为什么一旦new()完成后,可变的借款不会结束?什么是正确的方式来实现我想要的?
谢谢!你是完全正确的,我相应地修改了代码。 – tafia