我有这个代码:
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
).
我有一个可变变量和一个不可变链接。为什么编译器会报错呢?
Rust 编程语言 https://doc.rust-lang.org/stable/book/定义参考文献规则 https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html#the-rules-of-references:
- 在任何给定时间,您可以拥有一个可变引用或任意数量的不可变引用。
- 参考文献必须始终有效。
隐式重新分配变量需要可变引用:
fn main() {
let mut x = 33;
let link = &x;
x = 22;
*(&mut x) = 22; // Basically the same thing
}
重要的是,重新分配变量mutates变量,这会导致不可变的参考link
改变,这是不允许的。
请注意,变量的初始赋值并不not要求变量是可变的:
fn main() {
let x;
// Some other code
x = 42;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)