首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >19.Rust-借用

19.Rust-借用

原创
作者头像
面向加薪学习
修改2022-09-04 11:38:50
3050
修改2022-09-04 11:38:50
举报
文章被收录于专栏:面向加薪学习面向加薪学习

生活中,我们对工具有所有权,但是也不妨碍我们可以把工具借给别人甚至租用给别人,别人用完了,要还给你的。

Rust 中,Borrowing(借用),就是一个函数中的变量传递给另外一个函数作为参数暂时使用。也会要求函数参数离开自己作用域的时候将所有权 还给当初传递给它的变量(好借好还,再借不难嘛!)。

&变量名  //要把参数定义的时候这样定义。

例子如下:

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语言微服务架构师"]

可变的借用

上面我们的例子可以说都是只读的,我们看下面:

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 关键字。

修改如下:

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(借用)的时候改变其中的值:

  1. 变量要用mut关键字。
  2. 函数参数为可变的要用 &mut 关键字。
  3. 传递参数的时候,也要用 &mut 关键字。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可变的借用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档