本文共 2654 字,大约阅读时间需要 8 分钟。
1.Rust 中的每一个值都有一个叫做它的所有者(owner)的变量。 2.同时一次只能有一个所有者 3.当所有者变量离开作用域,这个值将被丢弃。我们接下来会用代码的形式来进行讲解,不懂的可以去官方文档看看语法。
{ let x = String::from("test"); println!("in scope hello this is {}", x); } println!("out scope hello this is {}", x);当然,这段代码是无法执行的,因为根本无法通过编译,报错如下
error[E0425]: cannot find value `x` in this scope --> src/main.rs:13:40 |13 | println!("out scope hello this is {}", x); | ^ not found in this scope因为x在为这个String的值的所有者,在所有者离开作用域后值直接被释放了,这一点和其它编程语言是很相似的。
let x = String::from("123"); let y = x; println!("x = {}, y = {}", x, y);
error[E0382]: use of moved value: `x` --> src/main.rs:11:32 |10 | let y = x; | - value moved here11 | println!("x = {}, y = {}", x, y); | ^ value used here after move | = note: move occurs because `x` has type `std::string::String`, which does not implement the `Copy` trait报错上显示x的值被移动了,你们可能在想,这是什么鬼。我们接下来就来扯一下数据的内存吧
let x = 1; let y = x; println!("x = {}, y = {}", x, y);
fn hello(str: String) { println!("{}", str); } fn test() { let x = String::from("123"); hello(x); println!("x = {}", x); }
error[E0382]: use of moved value: `x` --> src/main.rs:15:24 |14 | hello(x); | - value moved here15 | println!("x = {}", x); | ^ value used here after move | = note: move occurs because `x` has type `std::string::String`, which does not implement the `Copy` trait
转载地址:http://yigmi.baihongyu.com/