一起长锈:4 默认不可变的变量绑定与引用(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码

  • 故事梗概:
  • 在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;
  • 然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而不至被裁员,她必须领会编程如何"快速"才能有真正的意义。

上次我们聊到,我们那三个程序员小伙伴一起钻研了Rust的prelude和宏。他们还在继续深入研究代码。

赵可菲:“那个给 guess 赋值的语句,没写明类型,看来Rust是自动帮我们判断类型的吧。”

    let mut guess = String::new();

贾克强:“没错,Rust是会自动帮我们判断类型,这样代码看起来就更简洁了。但是要注意那句话其实是在做变量绑定(binding),不是赋值哦。”

4.1 默认不可变的变量绑定

贾克强:“在Rust中,我们let关键字把一个值和一个变量名绑定在一起。”

“这个过程可能会涉及到类型推断和类型标注,但类型标注是可选的,所以不用太担心。”

默认情况下,变量绑定的值是不能改变的,也就是说,一旦你把一个值绑定到一个变量,那这个变量的值就不能改变了。”

“但是,如果你在声明变量的时候用了mut关键字,那这个变量就可以改变了,很灵活。”

席双嘉:“在C++里是没有这个变量绑定的概念。”

赵可菲:“Java里也没有变量绑定。那在Rust里就没有变量赋值吗?”

贾克强:“在 Rust 语言中,赋值语句的概念确实还是存在的,但它和变量绑定不一样,两者在用法和含义上有不少区别。”

赋值语句在 Rust 中用来修改已经绑定的变量的值。如果变量是可变的,也就是用 mut 声明的,那就可以对其进行重新赋值。”

“比如在我们的代码中的这两行。上面一行就是变量绑定,非常简洁。然后下面一行的.read_line(&mut guess),这个方法调用,就是对 guess 变量进行赋值的。”

let mut guess = String::new();io::stdin().read_line(&mut guess).expect("Failed to read line");

read_line 方法尝试从标准输入(stdin)读取一行数据,并会把读取的内容追加到 guess 字符串的末尾。”

”在这里,&mut guess 是对 guess 的可变引用,这让 read_line 方法可以修改 guess 的内容。”

“注意,&意味着guess这个参数是个引用。引用默认也是不可变的。”

赵可菲:“嘿,为啥Rust要设计变量绑定这样的机制呢?有啥好处不?”

贾克强:“Rust的变量绑定跟Java或C++的赋值不一样,其实主要是体现了更深的语言设计原则和变量行为的差别。”

变量绑定除了默认不可变这点,还包括变量值的所有权和范围的特性。

“Rust的所有权模型就是,你给一个值取个名字的时候,也在定义这个值的有效范围,以及对它的内存管理的责任。”

这个概念跟Rust的所有权、借用和生命周期系统紧紧相连,跟Java和C++的内存管理模型可是大不一样呢。”

4.1.1 默认可变的Java 和 C++ 中的赋值

贾克强:“在 Java 和 C++ 这种语言里,‘赋值’这个词就像是直接把操作摆上桌面。”

“首先,就是默认都可以改。跟 Rust 不一样,在 Java 和 C++ 里,变量默认都是可以随便改的。你给一个变量赋个值,然后就可以随便改。”

“然后就是内存管理。Java 是靠垃圾收集来管理内存的。C++ 就需要你自己去管理内存,比如用 new

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称,可以尽量使用覆盖索引,避免回表查询,因此可以提高效率 2.字面意思,无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

羊大师分解,羊奶不为人知的健康奇迹

羊大师分解,羊奶不为人知的健康奇迹 羊奶是一种营养丰富的食品,拥有许多不为人知的健康益处。 益智健脑:羊奶中含有较高的钙、蛋白质、氨基酸、维生素、矿物质、无机盐、核酸等营养成分,这些都对大脑发育及增强智力有很大帮助。…

MySQL mydumper工具

目录 1. mydumper介绍 2. mydumper参数解释 3. 备份例子 3.1 备份全库(未包含其他) 3.2 备份全库(包含其他) 3.3 备份指定数据库(-B或--database) 3.4 导出指定表(-T或--tables-list) 3.5 只导出表结构,不导出表数据(-d或--no-data) 3.6 只导出表数据&#…

包管理工具npm的安装和使用

包管理工具 管理 包 的应用软件,可以对 包 进行下载 安装,更新,删除,上传 等操作。 借助包管理工具,可以快速开发项目,提升开发效率。 包管理工具是一个通用的概念,很多编程语言都有包管理工…

likeshop多商户单商户商城_likeshop跑腿源码_likeshop物品租赁系统开源版怎么配置小程序对接?

本人是商业用户所以能持续得到最新商业版,今天我说下likeshop里面怎么打包小程序,大家得到程序时候会发现它有admin目录 app目录 server目录 这三个目录分别是做什么呢? 1.admin目录 下面都是架构文件使用得是Node.js打包得,至于…

管道通信与Linux命令的执行-(读书笔记-十三)

|前一个命令的输出作为后一个命令的输入。 在Linux中,|符号是一个管道符号,用于将前一个命令的输出作为后一个命令的输入。这种机制允许你将多个命令组合在一起,以执行复杂的操作。下面是一些基本的例子: 查看当前目录下的文件列…

数据互通新纪元,企业如何实现系统无缝对接?

一、客户介绍 某文化发展有限公司,是一家在二次元文化领域深耕的领先企业,自成立以来,始终致力于为广大二次元爱好者提供丰富多样的正版衍生品和独特的文化体验。作为一家专注于二次元周边产品的公司,该公司拥有全面的产品线&…

网站访问免费升级成 HTTPS——值得收藏

实现HTTPS协议可以分为四个主要步骤,以确保网站数据传输的安全性。以下是简明清晰的流程概述: 1. 申请SSL证书 - SSL证书是实现HTTPS的基础,它包含了网站的身份信息以及公钥等。首先,你需要从受信任的证书颁发机构(CA)申请一个SSL…

新建的springBoot WEB项目无法自动返回html模版(gradle+kotlin版本)

最近研究了springBoot创建web项目, 第一步服务端返回字符串没有问题,第二步返回html时,还是返回的字符串。 文章目录 一、参考方案二、新建springBoot web项目三、启动项目的三种方式 一、参考方案 将控制器类的 RestController 改为 Contro…

Listview控件的5种视图

在C#中,ListView控件是用于显示和编辑列表数据的常用控件。它可以显示数据项的列表,并允许用户对列表中的数据进行操作。 ListView控件有五种视图模式,分别是: LargeIcon视图:在此视图中,每个数据项都显示…

如何剪辑视频中不想要的片段?教你轻松剪辑

如何剪辑视频中不想要的片段?在视频编辑的精湛艺术中,精确剪辑掉不想要的片段无疑是提升视频品质和专业水准的关键一环。技术的进步使我们得以借助多种高效、易用的视频剪辑软件,轻松去除冗余,保留精华,从而创作出更加…

大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频

✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型(LLMs)自动化和加速从仿真(sim)到现实世界(real)转移的技术。在机器人技能学习领域&#x…

使用socat 做端口转发 调试设备

使用 socat 监听设备的端口,转发到PC的 一个sniff 程序上,查看wireshark 或者直接用 scapy 进行分析 有了socat 也可以做 nat 映射

MySQL mysqldump备份恢复

目录 1. 备份类型 2. 逻辑备份VS物理备份 3. mysqldump工具 3.1 备份命令格式 3.2 备份选项 3.3 备份全库(结构和数据) 3.4 备份全库(仅结构) 3.5 备份全库(仅数据) 3.6 备份单个数据库(结构和数据) 3.7 备份单个数据库(仅结构) 3.8 备份单个数据库(仅数据) 3.9…

低代码系统能够解决哪些痛点?

不同的应用场景下,低代码系统解决的痛点是不一样的。工业应用场景中的组态软件应该说是最早的低代码系统了。以 Topstack 为代表的Web 组态软件,其核心功能设备数据采集、图形监控画面、数据报表、数据看板、业务逻辑开发等,都是无代码或低代…

个人出租房屋收入需汇算吗?柯桥会计培训

2023年度个人所得税综合所得汇算清缴正在进行,个人出租房屋的收入需并入汇算清缴吗?汇算最后一步显示免申报是什么意思? 1 个人出租房屋的收入需并入汇算清缴吗? 答:不用。根据《国家税务总局关于办理2023年度个人所…

UaExpert(OPCUA上位机第三方工具)通过OPCUA协议读写PLC 1500数据

一、CPU1500配置参数 1.激活OPC UA服务器 2.选择许可证(所需要的许可证类型) 3.启用访客认证(如果需要上位机输入用户信息访问,则需要添加用户名和密码) 4.选择TCP/IP,本地仿真选择local、single adapt…

基于大模型的idea提炼:围绕论文和引用提炼idea之ResearchAgent

前言 对本博客比较熟悉的朋友知道,我司论文项目组正在基于大模型做论文的审稿(含CS英文论文审稿、和金融中文论文审稿)、翻译,且除了审稿翻译之外,我们还将继续做润色/修订、idea提炼(包含论文检索),是一个大的系统,包…

CVE-2022-32250漏洞原理

CVE-2022-32250漏洞原理 原创 hope 蚁景网安 2024-05-06 20:00 湖南 前言 在nftales中存在着集合(sets),用于存储唯一值的集合。sets 提供了高效地检查一个元素是否存在于集合中的机制,它可以用于各种网络过滤和转发规则。 而CVE-2022-32250漏洞则是由…

【PX4-AutoPilot教程-TIPS】Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息

Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息的解决方法 问题描述解决方法 环境: MATLAB : R2022b ROS Toolbox : 1.6 Windows :Windows 10 22H2 ROS :ROS2 Foxy 问题描述 在使用Matlab的ROS Toolbox工具箱编译与…