我正在学习Rust,我遇到了一些令人困惑的行为.以下代码编译正常并按预期工作(编辑:添加除测试函数以外的代码,之前省略):
struct Container<'a> {
contents : &'a mut i32,
}
fn main() {
let mut one = Container { contents: &mut 5 };
test(&mut one);
println!("Contents: {}",one.contents);
}
fn test<'a>(mut x : &'a mut Container) {
*x.contents += 1;
let y = x;
*y.contents += 1;
x = y;
println!("{:?}",*x.contents)
}
Run Code Online (Sandbox Code Playgroud)
现在在声明中
let y = x;
Run Code Online (Sandbox Code Playgroud)
推断出类型.因为x是类型&'a mut Container,我认为这是等价的:
let y: &'a mut Container = x;
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,编译器会遇到问题:
test_3.rs:25:5: 25:10 error: cannot assign to `x` …Run Code Online (Sandbox Code Playgroud)