Rust入门之一

Rust Concept–1.Ownership

变量绑定

rust中的变量绑定有一些特性,其中一个就是变量名会对数据值拥有Ownership。
比如,创建一个vector:

let t = vec![1,2,3];
let v = t;

将t的值绑定给v时,t就无法再访问了。
这主要是因为rust考虑安全的需要。
let t绑定时,rust在stack中分配了内存给变量名,并在heap中分配内存给数据值,这时会有 内指针 把变量名指向对应的数据值。
将t绑定到v时,stack中copy了t中对应的内存地址给v,但是heap中并没有变化。
如果t没有实现copy trait的话,为了不出现两个内指针指向同一片heap区域的情况,之后t将不能再访问。
而t实现了copy trait的话,比如所有的基本类型(这种情况下发生full copy,同时copy了name和data),之后t仍能继续访问。


函数传参

注意:这里的函数传入的参数都是参量本身,而非引用。

1: fn take(v: Vec<i32>){
2:
3: }
4: fn main(){
5:   let v = vec![1,2,3];
6:   take(v);//在这里v的ownership转移了

之后再访问v的话,编译器会报错。
可以通过给函数添加返回值的方式来实现函数调用后归还ownership:

1: fn take(v: Vec<i32>) -> Vec<i32> {
2: v
3: }

同时也可以让函数返回结果值:

fn eval(v1: Vec<i32>, v2: Vec<i32>) ->                   (Vec<i32>, Vec<i32>, i32){
(v1,v2,233)
}

你可能感兴趣的:(rust学习)