热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RUST基础:变量声明

Rust的变量必须先声明后,才可以使用,声明变量用let关键字。其语法为:let x  1;变量完整的声明格式为:letx:i321;其中i是整数有符号类型,32位代表占32位bi

Rust的变量必须先声明后,才可以使用,声明变量用let关键字。

其语法为:let  x  =  1;

变量完整的声明格式为:

let x : i32 = 1;

其中i是整数有符号类型,32位代表占32位bits,后续会详解。

 局部变量声明一定是以关键字let开头,变量的类型跟在:(冒号)后面。这样语法歧义性更少,更能突出变量类型,减少因为变量的类型错误,语法分析器更容易编写。

let关键字所声明的变量语句,具有模式解构(pattern destructure)的功能。关于模式结构,后面会有专门说明其用法含义的博客。

通过let声明的变量,官方称为不可变变量,可以理解为只读变量,即变量x声明后,无法进行更改。

例如:

fn main() {
let x
= 1;
x
= 2;
}

以上代买运行后,会编译错误:

 

我们要将上述代码编译通过,需要用到mut关键字,通过mut关键字声明的变量,可以实现变量x的改写:

fn main() {
let mut x
= 1;
x
= 2;
}

上述let声明的标量,就是一个典型的模式解构,我们把 mut x 看成一个组合,即mut x是一个“模式”,以这个为例,我们举一反三,可以用此方式同时声明多个变量:

let (mut a,mut b) = (1,2);

"="左边的部分看成是一个模式,右边是变量初始化,这是对tuple的模式解构。

在Rust中,一般把声明的局部变量并初始化的语句称为“变量绑定”,这里强调的是“绑定”的含义,与C/C++中的“赋值初始化”的语句有所区别。

Rust中,每个变量必须被合理的初始化之后才能被使用,使用未初始化的变量的错误,在Rust中是不可能出现的,当然利用unsafe,hack除外。

fn main() {
let x ;
println
!("x = {}",x)
}

上述代码编译报错:

 

 在代码中,如果变量x未初始化,但是也没有使用的这个变量x,那么编译将会通过,不会报错,同时变量声明后,可以在后面在进行初始化:

fn main(){

    let x;

    let a = 3;

    if a != 3 {

        x = 1

        println!("{}",x)

    }

    else{

        println!("{}",a)

    }

}

 

 



推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 本文介绍如何使用 Python 获取文件和图片的创建、修改及拍摄日期。通过多种方法,如 PIL 库的 _getexif() 函数和 os 模块的 getmtime() 和 stat() 方法,详细讲解了这些技术的应用场景和注意事项。 ... [详细]
  • 编程挑战:2019 Nitacm 校赛 D 题 - 雷顿女士与分队(高级版)
    本文深入解析了2019年Nitacm校赛D题——雷顿女士与分队(高级版),详细介绍了问题背景、解题思路及优化方案。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
author-avatar
KJ慧兒H妹子Ed
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有