一起长锈: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。

一.Oceanbase all-in-one单机版部署 1.修改资源限制。 vim /etc/security/limits.conf root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 * soft stack unlimited * hard stack unlimited * soft nproc 655360 * hard nproc 6553…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时,搜索无结果,如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

ChatGPT4 Turbo 如何升级体验?官网如何使用最新版GPT-4 Turbo?

本文会教大家如何教大家升级自己的GPT4到GPT4 Turbo,同时检验自己的GPT4 Turbo是否是最新版本的GPT-4-Turbo-2024-04-09 说明 新版GPT-4 Turbo再次重夺大模型排行榜王座,超越了Claude 3 Opus。 最新版本的GPT-4 Turbo被命名为GPT-4-Turbo-2024-04-09。…

thinkadmin table列表页点击直接修改用户金额(其他内容都可以)

需要修改用户余额时 点击余额区域 可以手动输入金额 输入后调用api接口自动刷新 html代码 // 初始化表格组件$(#NewsTable).layTable({even: true, height: full,sort: {field: id, type: desc},where: {type: {$type|default="index"}},cols: [[{checkbox: true,…

pip install 过程中报错:Microsoft Visual C++ 14.0 is required.

这是因为电脑中缺少这个组件导致的,我们将这个组件安装上即可解决问题。 安装报错关键信息:Microsoft Visual C++ 14.0 is required. 目录 一、下载组件 二、 安装步骤 一、下载组件 阿里网盘:VisualStudioSetup.exe:

Python生成文学编程风格文档库之pycco使用详解

概要 Pycco是一个Python库,用于生成文学编程风格的文档。它受到了Docco(一个快速生成源代码文档的工具)的启发,并通过解析源代码旁边的注释来创建一个美观的文档页面,使代码的解释与代码本身并排显示。 安装 安装Pycco非常简单,可以通过Python的包管理器pip进行安装: …

栈和队列的定义和实现

栈和队列 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 **称为栈顶,另一端称为栈底。**栈中的数据元素遵守后进先出LIFO(Last In First Out&#…

如何应对Android面试官 -> PKMS 权限管理

前言 本章我们继续上一章节,讲解 PKMS 相关知识点; 静默安装 静默安装说的就是:在用户无感知的情况下,给用户的手机安装了某个 app,或者是用户触发安装之后,不需要额外的任何操作即可以安装目标 app 到手机…

【JavaWeb】网上蛋糕项目商城-注册,登录,修改用户信息,提交订单

概念 通过以上多篇文章的讲解,对该项目的功能已经实现了很多,本文将对该项目的用户注册,登录,修改用户信息,以及用户添加至购物车的商品进行提交订单等功能的实现。 注册功能实现 点击head.jsp头部页面的注册按钮&a…

最新贷款市场报价利率(LPR)数据(1991-2024)

数据来源:东方财富网时间跨度:1991-2024年 数据范围:全国范围 数据指标: LPR_1Y利率(%) LPR_5Y利率(%) 中长期贷款利率:5年以上(%) 短期贷款利率:6个月至1年(含)(%) 日期 样例数据: 下载链接: ht…

win10 截图黑屏解决方法

win10 使用QQ截图等第三方工具截图黑屏,提示 Capturing screen is forbidden! 此时winshiftS截图也无法正常工作,解决方法如下: 参考地址:Redirecting

AHB---数据总线

1. 数据总线 为了实现AHB系统,需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位,但这可以根据数据总线宽度进行更改。 数据总线包含以下部分: HWDATAHRDATAEndianness(字节序) 1.1 HWDATA 在写传输…

MinimogWP WordPress 主题下载——优雅至上,功能无限

无论你是个人博客写手、创意工作者还是企业站点的管理员,MinimogWP 都将成为你在 WordPress 平台上的理想之选。以其优雅、灵活和功能丰富而闻名,MinimogWP 不仅提供了令人惊叹的外观,还为你的网站带来了无限的创作和定制可能性。 无与伦比的…

投资者悄然收购二手楼梯楼,在杭州豪掷巨资购买12套!

独家首发 -------------- 日前杭州中介流传,一名投资客大举收购二手楼梯楼,下手就是12套,显示出一些具有前瞻性眼光的投资者悄悄放弃电梯楼,选择了处于价格洼地的楼梯楼。 二手楼梯楼当下被严重低估,在一线城市的二手楼…

Tmux工具使用案例

Tmux工具使用案例 连接linux一般使用ssh&#xff0c;当ssh会话中需要长时间执行命令时&#xff0c;为了避免命令不受ssh会话影响&#xff0c;除了可以将命令通过nohup <cmd> &等方法放到后台执行外&#xff0c;也可以利用Tmux这个工具解绑SSH会话与执行命令&#xff…

Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释&#xff1a; 术语和概念&#xff1a; 任期号&#xff08;term number&#xff09;&#xff1a;用来区分不同的leader。前一个日志槽位的信息&#xff08;prelogIndex&#xff09;&#xff1a;这是前一个日志条目的索引&#…

关于二手车系统学习--登录模块

1.样式1-17行 <div class"cheader"><div style"width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px"><el-row><el-col:span"5"style"font-size: 20px;cursor: pointer;color: #00ae66;font-weight: bold…

苹果自研大语言模型“Ajax“ 助力iOS 18升级;Stack Overflow与OpenAI建立API合作伙伴关系

&#x1f989; AI新闻 &#x1f680; 苹果自研大语言模型"Ajax" 助力iOS 18升级 摘要&#xff1a;苹果公司预计通过自研大语言模型Ajax来为iOS 18和Siri带来重大升级&#xff0c;但不计划推出类似ChatGPT的AI聊天机器人。Ajax模型基于Google的Jax框架&#xff0c;并…

Android:弹出对话框方式梳理一览(一)

Android&#xff1a;弹出对话框方式梳理一览&#xff08;一&#xff09; Guide&#xff5c;导言 在Android开发中&#xff0c;对话框可能是我们与用户交互的非常常用的方式&#xff0c;包括弹出一个小界面&#xff0c;可能在实际场景中都非常实用。本篇文章主要就是对Android弹…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…