第2章 Rust初体验2/8:变量值绑定:默认不可变增强代码安全性:猜骰子冷热游戏

news2024/12/28 18:26:09

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

2.3.6 变量值绑定:默认不可变增强代码安全性

赵可菲:“那句给 guess 赋值的,没特别写出类型来,看起来Rust是自动帮我们搞定类型判断的吧。”

    let mut guess = String::new();

贾克强:“对啊,Rust会自动帮我们做类型推断(type inference),这让代码看起来更简洁不是吗?但是,亲爱的同学,这里其实是在做变量绑定(binding),并不是赋值哦。”

"在Rust中,当我们第一次使用一个变量的值之前,就要let关键字把值和变量名绑定在一起,这个过程我们称为变量绑定。"

“更重要的是,Rust 的 let 绑定机制默认情况下是不可变的。这意味着一旦你用 let 绑定了一个值到一个变量上,这个变量的值就不能再被改变(除非你显式使用 mut 声明为可变)。这种不可变性有助于避免无意的状态变化,提高代码的安全性和可靠性。”

席双嘉:“毫无疑问,在C++中不存在这个所谓的变量绑定。然而,这与变量的声明和初始化有一定的相似之处。”

赵可菲:“Java里也有变量声明和初始化。那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 内容的权限。”

2.3.6.1 能否只做变量声明,而不做变量初始化?

赵可菲:“如果在Rust里只声明变量,不做变量绑定,也就是不做初始化,会发生什么?”

贾克强:“哎呀,那样的话编译时会报错,提示说没有初始化哦。”

大家都对三种语言处理这个问题的不同方式进行了讨论。下面是艾极思用表格记录的讨论纪要。

只做变量声明而不做初始化 变量类型 只声明不初始化是否允许 未初始化后的初始值
Rust 局部变量 不允许 (编译错误)

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

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

相关文章

Linux 基本指令1

ls指令 ls【-选项】【目录或文件】当不指定目录或文件时指令能列出当前目录下所有文件除隐藏文件 选项: -a 列出所有包括隐藏的文件-隐藏文件以.开头。 -d 将目录如文件般显示-一般用ls显示目录是显示其目录中所有文件,加-d则显示目录的信息 -r 以反…

【数据结构】单链表(C语言)

在数据结构和算法中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C语言中,我们可以使用指针来实现单向链表。下面将详细讲述如何利用C语言实现单向链表。 1.单链表的概念和结构 概…

C++发送邮件的性能如何优化?有哪些方法?

C发送邮件怎么配置SMTP服务器?如何使用C库发信? 在现代应用程序中,电子邮件发送是一个常见的功能。尤其对于需要发送大量邮件的企业级应用,优化邮件发送性能变得尤为重要。AokSend将探讨在使用C发送邮件时,如何通过各…

电脑想加个WIFI功能,怎么选!

在快速发展的物联网和智能家居时代,Wi-Fi模块作为连接各类智能设备与互联网的桥梁,其重要性不言而喻。而为了让这些模块能够适应各式各样的应用场景,不同的接口技术应运而生。今天,我们就来深入浅出地探讨几种常见的Wi-Fi模块接口,包括它们的工作原理、特点以及适用场景,…

Docker以挂载方式安装RocketMQ

Docker 挂载安装RocketMQ Docker 挂载安装RocketMQ安装 Docker安装NameServer1.拉取容器2.创建NameServer容器3.查看容器状态 安装 broker创建 broker.conf 文件启动容器 安装RocketMQ-console构建镜像启动容器开通安全组策略访问控制台 Docker 挂载安装RocketMQ 在 Docker 中…

LangChain入门学习笔记(二)——LangChain表达式语言(LCEL)

基于LangChain框架编写大模型应用的过程就像垒积木,其中的积木就是Prompts,LLMs和各种OutputParser等。如何将这些积木组织起来,除了使用基本Python语法调用对应类的方法,一种更灵活的方法就是使用位于LangChain-Core层中的LCEL&a…

python的四个进度条

哈喽,我是快乐吗喽,今天简单的给大家介绍一下python的四个进度条工具,希望各位喜欢。 第一个进度条工具tqdm,好记点我叫她淘气大妈 安装tqdm库 pip install tqdm 基本用法 from tqdm import tqdm import timefor i in tqdm(ran…

SpringBoot2+Vue3开发课程审核流程系统

SpringBoot2Vue3开发课程审核流程系统 简介 此系统实现了课程审核全流程功能并使用了Activiti7工作流技术,功能包含:课程管理、用户管理、流程定义、课程审核(我的申请、我的代办、我的已办) 功能介绍 课程管理 对课程信息的管…

录音转文字软件:一键让工作学习更高效

在职场这个大舞台上,每一场会议都是关键的演出,而会议记录就是这场演出的剧本。但剧本要整理得好,才能让演出更精彩,不是吗? 把那些长串的会议音频变成清晰的文字记录,听起来就像变魔术一样难。但不用担心…

人工智能强化学习:核心内容、社会影响及未来展望

欢迎来到 Papicatch的博客 文章目录 🐋引言 🐋强化学习的核心内容 🦈强化学习基本概念 🐋强化学习算法 🦈Q学习(Q-Learning) 🦈深度Q网络(Deep Q-Network, DQN&…

AI日报|苹果生态全面整合AI功能,字节跳动被曝秘密启动AI手机研发

文章推荐 粽叶飘香,端午安康!AI视频送祝福啦~ 谁是最会写作文的AI“考生”?“阅卷老师”ChatGPT直呼惊艳! ⭐️搜索“可信AI进展“关注公众号,获取当日最新AI资讯 苹果WWDC 2024:AI为苹果带来了什么&am…

24年系统架构设计师考试真题大放送

哈喽,简单介绍一下,我是研究系统架构设计师/系统分析师考试3 年,累计帮助千人备考系统架构设计师的——凯恩。芝士架构刷题免费!芝士架构 | 软考备考第一站 这周,凯恩抽空把2024年系统架构设计师真题的选择题&#xff…

【qt】视口和窗口坐标

视口和窗口坐标 一.视口和窗口坐标的原理二.视口和窗口坐标的好处三.演示好处四.总结 一.视口和窗口坐标的原理 在绘图事件中进行绘图 void Widget::paintEvent(QPaintEvent *event) {QPainter painter(this);QRect rect(200,0,200,200);painter.drawRect(rect);//设置视口的…

Vue3学习日记(day3)

目录详解: 简单解释: 详细解释: .vscode public assets compents router views app.vue package.json package-lock.json 区别 探究文档 应用配置​ 语法合集 插值表达式​ V- HTML(易造成xss漏洞)​…

2024世界人工智能大会“SAIL奖”发布

作为世界人工智能大会的最高奖项,SAIL 奖(Super AI Leader,卓越人工智能引领者)坚持“追求卓越、引领未来”的理念,评选和运营秉持“高端化、国际化、专业化、市场化、智能化”原则,从全球范围发掘在人工智…

VS2019+QT5.15调用动态库dll带有命名空间

VS2019QT5.15调用动态库dll带有命名空间 vs创建动态库 参考: QT调用vs2019生成的c动态库-CSDN博客 demo的dll头文件: // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号…

品牌渠道管控的风险与要点

品牌在管控渠道时,不仅要注重方法和效果,还得留意风险,以免被误解为“垄断”。在与品牌接触和服务过程中,我们整理出完善且合规的治理方法供品牌参考。先简单分享品牌控价的知识点。 价格管控指的是品牌对渠道低价、乱价情况的管理…

Vue 路由:一级路由,嵌套路由

1、安装路由插件,因为用的是vue2 所以路由版本要和vue2对应上,所有有3 yarn add vue-router3 2、在main.js里引入 import VueRouter from vue-router Vue.use(VueRouter) 3、新建文件夹 router,创建index.js 4、引入路由插件,并且暴露出来这个路由 5、在…

【OpenCV】CUDA讲解(一)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享关于CUDA的知识,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步&#xf…

探索 doc 和 docx 文件格式的区别

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…