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

聊聊Rust中的“借用”

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

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

借用基础操作

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

let y = &x;

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

assert_eq!(5, *y);

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

函数中的借用

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

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

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

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

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

可变引用:想要改一改?

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

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

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

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

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

可变引用的限制

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

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

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

大括号:作用域的艺术

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

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

总结一下

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

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

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

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

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

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

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 《英雄联盟》夏季赛总决赛今日开打!JDG对阵LNG首发名单来了 Knight:准备三连冠

    8月5日消息,今日17:00,《英雄联盟》2023LPL夏季赛总决赛将正式开打,由JDG对阵LNG。对两支队伍来说,这场比赛不仅要争夺夏季赛冠军,更要决定谁才是LPL赛区一
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top