Rust常见编程概念

2023-09-18 14:21:32

变量和可变性

rust使用let声明变量,变量默认是不可改变的。通过在let后面加上mut,可以声明可变变量。可以在变量名后加:和类型名,来显式声明变量类型,例如:

let a:u32 = 1;

常量

常量使用const声明,变量名一般约定使用大写。

隐藏

不同的作用域如果有重叠,且重叠区域内有同名的变量,那么更小的作用域里变量会隐藏外部作用域的变量。

数据类型

Rust有两类数据类型子集:标量(scalar)和复合(compound)。

标量包括:整型、浮点型、布尔型、字符型。

整型根据有无符号和长度,可以分为

其中arch根据具体架构确定,32位为4字节,64位为8字节。

整型可以根据不同的进制,写成不同的字面值形式:

Rust 的浮点数类型是 f32f64,分别占 32 位和 64 位。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。所有的浮点型都是有符号的。

Rust 中的所有数字类型都支持基本数学运算:加法、减法、乘法、除法和取余。整数除法会向零舍入到最接近的整数。 

Rust 中的布尔类型有两个可能的值:truefalse。Rust 中的布尔类型使用 bool 表示。

Rust 的 char 类型是语言中最原生的字母类型。Rust用单引号声明 char 字面量,使用双引号声明字符串字面量。Rust 的 char 类型的大小为四个字节 (four bytes),并代表了一个 Unicode 标量值(Unicode Scalar Value)。

复合型可以将多个值合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。

元组使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型。为了从元组中获取单个值,可以使用模式匹配(pattern matching)来解构(destructure)元组值。也可以使用点号(.)后跟值的索引来直接访问。

不带任何值的元组有个特殊的名称,叫做 单元(unit) 元组。这种值以及对应的类型都写作 (),表示空值或空的返回类型。如果表达式不返回任何其他值,则会隐式返回单元值。

数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,Rust 中的数组长度是固定的。当你想要在栈(stack)而不是在堆(heap)上为数据分配空间,或者是想要确保总是有固定数量的元素时,数组非常有用。但是数组并不如 vector 类型灵活。vector 类型是标准库提供的一个 允许 增长和缩小长度的类似数组的集合类型。当不确定是应该使用数组还是 vector 的时候,那么很可能应该使用 vector。

可以像这样编写数组的类型:在方括号中包含每个元素的类型,后跟分号,再后跟数组元素的数量。

let a: [i32; 5] = [1, 2, 3, 4, 5];

你还可以通过在方括号中指定初始值加分号再加元素个数的方式来创建一个每个元素都为相同值的数组:

let a = [3; 5];

可以使用索引来访问数组的元素。

函数

Rust 中通过输入 fn 后面跟着函数名和一对圆括号来定义函数。参数是特殊变量,是函数签名的一部分。在函数签名中,必须 声明每个参数的类型。函数体由一系列的语句和一个可选的结尾表达式构成。语句Statements)是执行一些操作但不返回值的指令。 表达式Expressions)计算并产生一个值。

函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。

注释

使用//开始注释,并持续到本行的结尾。对于超过一行的注释,需要在每一行前都加上 //。

控制流

if条件语句

包括if, else if, else。因为 if 是一个表达式,我们可以在 let 语句的右侧使用它。

loop无条件循环语句

包括loop, continue, break。因为loop是一个表达式,我们可以在 let 语句的右侧使用它。只需要在loop里通过break返回值。如果存在嵌套循环,breakcontinue 应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签loop label),然后将标签与 breakcontinue 一起使用,使这些关键字应用于已标记的循环而不是最内层的循环:

fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {count}");
}

while条件循环

和其他语言类似

for遍历集合

和其他语言类似

参考:

1.Rust常见编程概念

更多推荐

【计算机网络】IP协议第一讲(协议格式介绍)

IP协议1.协议头格式1.1概念介绍1.2补充说明1.2.18位生存时间---TTL1.2.216位首部检验和首先明确一个概念:TCP/IP协议是配合使用的,TCP负责可靠传输策略,IP则是负责传输,TCP协议是位于传输层提供的是策略解决可靠性问题,IP协议在网络层,提供的是网络传输服务,实现A主机到B主机的跨网络通信

Python爬虫异常处理实用技巧分享

当我们编写爬虫程序时,经常会遇到各种各样的异常情况,比如网络连接失败、页面解析错误、请求被拒绝等等。这些异常情况可能导致程序中断或者无法正常运行,给我们的数据采集工作带来一定的困扰。所以,掌握一些实用的异常处理技巧对于提高爬虫的稳定性和效率非常重要。在Python中,我们可以使用try-except语句来处理异常。下面

DSOX3012A是德科技keysight DSOX3012A示波器

181/2461/8938是德科技DSOX3012A(安捷伦)示波器是德科技DSOX3012A(安捷伦)是InfiniiVision3000X系列中的双通道型号。这款可升级示波器采用突破性技术设计,提供卓越的性能和功能。其独特的5仪器合一设计为相同的预算提供了更大的范围。是德科技DSOX3012A示波器的特性和规格包括

网络安全深入学习第五课——热门框架漏洞(RCE— Apache Shiro 1.2.4反序列化漏洞)

文章目录一、序列化和反序列化二、反序列化漏洞原理三、ApacheShiro1.2.4反序列化漏洞1、漏洞描述:2、漏洞影响的版本3、Shiro反序列化漏洞原理4、工作原理:5、shiro反序列化的特征:四、ApacheShiro1.2.4反序列化漏洞手工复现1、使用DNSlog严重漏洞是否存在2、VPS监听端口3、构造

【Vue】如何搭建SPA项目--详细教程

🎬艳艳耶✌️:个人主页🔥个人专栏:《Spring与Mybatis集成整合》《springMvc使用》⛺️生活的理想,为了不断更新自己!目录1.什么是vue-cli2.安装2.1.创建SPA项目2.3.一问一答模式答案3.运行SPA项目3.1.导入项目3.2.运行项目4.基于SPA项目完成路由4.1.案例实操5.基于

Python灰帽子编程————网页信息爬取

爬取图片,问题分解:获取网页内容;从网页内容中提取图片地址;通过图片地址,将图片下载到本地。1.相关模块1.1requests模块获取网页内容。requests模块:主要是用来模拟浏览器行为,发送HTTP请求,并处理HTTP响应的功能。importrequests#被认为,最贴近与人的操作的模块importurllib

【C++】C++ 引用详解 ⑥ ( 普通变量 / 一级指针 / 二级指针 做函数参数的作用 )

文章目录一、普通变量/一级指针/二级指针做函数参数的作用1、普通变量做函数参数的作用2、一级指针做函数参数的作用3、二级指针做函数参数的作用4、代码示例-二级指针做函数参数的作用一、普通变量/一级指针/二级指针做函数参数的作用1、普通变量做函数参数的作用普通变量的作用:将普通变量传入函数作为参数,则可以在函数中,访问到

【Java 基础篇】Java 运算符宝典:Java编程的关键

在Java编程中,运算符是用于执行各种操作的特殊符号。它们可以用于操作各种数据类型,执行算术、逻辑和比较等操作。本篇博客将详细介绍Java中常见的运算符,以及它们的使用和示例。算术运算符算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法。加法运算符(+)加法运算符用于将两个值相加,并返回它们的和。示例:inta

MySQL主从复制与读写分离

目录MySQL主从复制1、mysql支持的复制类型2、主从复制的工作过程3、主从复制操作1)下载时间同步工具,并配置时间源,实现slave库与master库时间同步2)、配置主master库3)配置slave库4)登录主MySQL,给从服务器授权5)登录从数据库,配置同步,并启动同步6)测试MySQL读写分离MySQL

HTTPS的传输过程

加密分为两种方式一种是对称加密,一种是非对称加密。在对称加密算法中,加密和解密使用的密钥是相同的。也就是说,加密和解密使用的是同一个密钥。因此,对称加密算法要保证安全性的话,密钥要做好保密。只能让使用的人知道,不能对外公开。在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为公开的公钥,另一把是作为

机器学习西瓜书+南瓜书吃瓜教程学习笔记第四章决策树

1、算法原理从逻辑角度,一堆ifelse语句的组合从集合角度,根据某种准则划分特征空间最终目的:将样本越分越“纯”决策树是基于树结构来进行决策的例如,我们对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“

热文推荐