当前位置:首页 > 科技  > 软件

聊聊Rust中的“借用”

来源: 责编: 时间:2024-04-26 08:53:12 91观看
导读在Rust的世界里,想要优雅地共享数据,就得聊聊“借用”这档子事。想象一下,朋友有个宝贝,咱们不夺人所爱,只是暂时借用一下,用完还得物归原主,这就是借用(Borrowing)的核心思想。借用基础操作来看看这行代码:let y = &x;这里,y

在Rust的世界里,想要优雅地共享数据,就得聊聊“借用”这档子事。想象一下,朋友有个宝贝,咱们不夺人所爱,只是暂时借用一下,用完还得物归原主,这就是借用(Borrowing)的核心思想。GBR28资讯网——每日最新资讯28at.com

借用基础操作

来看看这行代码:GBR28资讯网——每日最新资讯28at.com

let y = &x;

这里,y就是一个指向x的引用,就像你跟朋友说:“嘿,借你那5块钱瞅瞅。”要查看y指向的值,得用解引用运算符,就像这样:GBR28资讯网——每日最新资讯28at.com

assert_eq!(5, *y);

就像借来的钱终究要还,引用离开作用域后,它指向的数据依然安好无恙。GBR28资讯网——每日最新资讯28at.com

函数中的借用

比如,我们要计算字符串s1的长度,但又不想转让所有权,怎么办?用引用传参呗!GBR28资讯网——每日最新资讯28at.com

fn calculate_length(s: &String) -> usize {   s.len()}

在main函数里,我们这么用:GBR28资讯网——每日最新资讯28at.com

let s1 = String::from("hello");let len = calculate_length(&s1);println!("The length of '{}' is {}.", s1, len);

瞧见没,s1的引用被传递给了calculate_length函数,既测了长度,又没动人家的奶酪,多和谐!GBR28资讯网——每日最新资讯28at.com

可变引用:想要改一改?

不过,要是想修改借用的东西,就像你不仅想牵牵手还想给妹子一个拥抱,那就得用可变引用了,得这么写:GBR28资讯网——每日最新资讯28at.com

fn change(some_string: &mut String) {   some_string.push_str(", world");}

记得,被借用的变量也得是可变的,就像这样初始化:GBR28资讯网——每日最新资讯28at.com

let mut s = String::from("hello");change(&mut s);

这下,你的“hello”就能变成“hello, world”了。GBR28资讯网——每日最新资讯28at.com

可变引用的限制

但别太贪心,Rust规定,在同一时间,对于同一个数据,只能有一个可变引用存在。比如这段代码就会报错:GBR28资讯网——每日最新资讯28at.com

let mut s = String::from("hello");let r1 = &mut s;let r2 = &mut s; // 这里会报错

为啥?因为Rust的borrow checker(借用检查器)在盯着呢,它绝不允许数据竞争这种危险的事情发生,那可是软件bug的大户。GBR28资讯网——每日最新资讯28at.com

大括号:作用域的艺术

遇到借用冲突,别急,大括号是你的解药。它能帮你控制变量的作用域,这样就能巧妙避开借用检查器的红线:GBR28资讯网——每日最新资讯28at.com

{   let r1 = &mut s;} // r1的生命到此为止let r2 = &mut s; // 现在可以再创建一个可变引用了

总结一下

  • 借用让代码更简洁,还能避免所有权的频繁转移。
  • 要修改数据,记得用可变引用&mut。
  • 同一时间,一个数据只能被一个可变引用借用,但可以有任意数量的不可变引用。
  • 利用大括号控制作用域,能解决很多借用问题。

怎么样,是不是觉得Rust的借用机制既严格又贴心?这都是为了咱们程序的安全和稳定啊!GBR28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85712-0.html聊聊Rust中的“借用”

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 秒挂了!与快手无缘了....

下一篇: 护航千行百业应用鸿蒙化,超 60 个安全类鸿蒙生态伙伴 SDK 加速适配原生鸿蒙

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • Automa-通过连接块来自动化你的浏览器

    Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 学习JavaScript的10个理由...

    学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 2023年,我眼中的字节跳动

    2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
Top