【发布时间】:2015-07-20 10:46:57
【问题描述】:
首先我想为这个标题不明确的菜鸟问题道歉,我对 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 和一个包含对 A 的不可变引用的结构 B。在 main 方法中,使用对单个 A 对象的引用创建了几个 B 对象。
现在我只想更改一件事:在 B::new() 方法中,我想在将 'reference' 的数据用作 B 的不可变成员之前修改它。我尝试过这样:
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 作为 mutable。为什么 new() 完成后可变借用不结束?实现我正在尝试的正确方法是什么?
【问题讨论】:
标签: rust