小编Mar*_*rds的帖子

键入推理和借入与所有权转移

我正在学习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)

ownership rust

7
推荐指数
1
解决办法
122
查看次数

标签 统计

ownership ×1

rust ×1