Rust 分配给借用的变量如何违反引用规则?
我有以下代码:Rust 分配给借用的变量如何违反引用规则?,rust,borrowing,Rust,Borrowing,我有以下代码: struct Foo<'a> { link: &'a i32, } fn main() { let mut x = 33; println!("x:{}", x); let ff = Foo { link: &x }; x = 22; } 铁锈书只有两条规则: 对资源的一个或多个引用(&T) 只有一个可变引用(&mut T) 我有一个可变变量和一个不可变链接。编译器为什么会给出错误?定义: 在任何给定的时间
struct Foo<'a> {
link: &'a i32,
}
fn main() {
let mut x = 33;
println!("x:{}", x);
let ff = Foo { link: &x };
x = 22;
}
铁锈书只有两条规则:
&T
)&mut T
)- 在任何给定的时间,可以有一个可变引用,也可以有任意数量的不可变引用
- 引用必须始终有效
fn main() {
let mut x = 33;
let link = &x;
x = 22;
*(&mut x) = 22; // Basically the same thing
}
重要的是,重新分配变量会使变量发生变异,这将导致不可变的引用链接的值发生更改,这是不允许的
请注意,变量的初始赋值不要求变量是可变的:
fn main() {
let x;
// Some other code
x = 42;
}
定义:
- 在任何给定的时间,可以有一个可变引用,也可以有任意数量的不可变引用
- 引用必须始终有效
隐式重新分配变量需要可变引用:
fn main() {
let mut x = 33;
let link = &x;
x = 22;
*(&mut x) = 22; // Basically the same thing
}
重要的是,重新分配变量会使变量发生变异,这将导致不可变的引用链接的值发生更改,这是不允许的
请注意,变量的初始赋值不要求变量是可变的:
fn main() {
let x;
// Some other code
x = 42;
}
是否有任何官方文档或教程表明,隐式分配给变量需要可变引用?@Kun我已经澄清了一些措辞;这实际上是重新分配,希望更明显的是一个值的突变。否则,我不知道。总的来说,很多人觉得这是不言而喻的!我认为不允许对借用变量(可变或不变借用)的所有者进行变异/重新分配是有道理的,只是希望它能更好地记录在铁锈书中。是否有官方文档或教程说明,隐式分配变量需要可变引用?@Kun我已经澄清了一些措辞;这实际上是重新分配,希望更明显的是一个值的突变。否则,我不知道。总的来说,很多人觉得这是不言而喻的!我认为不允许对借用的变量(可变或不变借用)的所有者进行变异/重新分配是有道理的,只是希望它能更好地记录在rust book中。