我有这段代码:
struct Foo<'a> {
link: &'a i32,
}
fn main() {
let mut x = 33;
println!("x:{}", x);
let ff = Foo { link: &x };
x = 22;
}
生成此编译器错误:
error[E0506]: cannot assign to `x` because it is borrowed
--> src/main.rs:9:5
|
8 | let ff = Foo { link: &x };
| - borrow of `x` occurs here
9 | x = 22;
| ^^^^^^ assignment to borrowed `x` occurs here
Rust书只有两个规则:
&T
),&mut T
)。我有一个可变变量和一个不可变链接。为什么编译器会出错?
答案 0 :(得分:3)
The Rust Programming Language, 2nd edition定义the rules of references:
- 在任何时候,你可以有以下两种:
- 一个可变的参考文献。
- 任意数量的不可变引用。
- 参考文件必须始终有效。
醇>
隐式地分配给变量需要一个可变引用:
fn main() {
let mut x = 33;
let link = &x;
x = 22;
*(&mut x) = 22; // Basically the same thing
}
重要的是,分配给变量变异变量,这会导致不可变引用link
的值发生变化,这是不允许的。