19.Borrowing 借用所有权 生活中,我们对工具有所有权,但是也不妨碍我们可以把工具借给别人甚至租用给别人,别人用完了,要还给你的。
Rust 中,Borrowing(借用) ,就是一个函数中的变量传递给另外一个函数作为参数暂时使用。也会要求函数参数离开自己作用域的时候将所有权 还给当初传递给它的变量(好借好还,再借不难嘛!)。
例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 fn show(v:&Vec<&str>){ println!("v:{:?}",v) } fn main() { let studyList = vec!["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"]; let studyList2 =studyList; show2(&studyList2); println!("studyList2:{:?}",studyList2); //我们看到,函数show使用完v2后,我们仍然可以继续使用 } //输出 v:["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"] v2:["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]
可变的借用 上面我们的例子可以说都是只读的,我们看下面:
1 2 3 4 5 6 7 8 9 10 fn show2(v:&Vec<&str>){ v[0]="第一个充电项目已完成"; println!("v:{:?}",v) } 报错如下: error[E0596]: cannot borrow `*v` as mutable, as it is behind a `&` reference | fn show2(v:&Vec<&str>){ | ---------- help: consider changing this to be a mutable reference: `&mut Vec<&str>` | v[0]="第一个充电项目已完成"; | ^ `v` is a `&` reference, so the data it refers to cannot be borrowed as mutable
报错的原因:我们的这个借用不可以是可变的。那么 Rust 中,如果想要让一个变量是可变的,只能在前面加上 mut 关键字。
修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 fn show2(v:&mut Vec<&str>){ v[0]="第一个充电项目已完成"; println!("v:{:?}",v) } fn main() { let mut studyList3 = vec!["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"]; println!("studyList3:{:?}",studyList3); show2(&mut studyList3); println!("调用后,studyList3:{:?}",studyList3); } //输出 studyList3:["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"] v:["第一阶段学习已完成", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"] 调用后,studyList3:["第一阶段学习已完成", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]
如果我们要在Borrowing(借用) 的时候改变其中的值:
变量要用mut 关键字。
函数参数为可变的要用 &mut 关键字。
传递参数的时候,也要用 &mut 关键字。
添加微信
公众号更多内容