【Rust】4. Rust 基础

news2024/9/23 21:55:29

4. Rust 基础

4.1 变量和可变性

在这里插入图片描述
在这里插入图片描述

4.1.1 常量

  • const xxx: type = ...:常量使用 const 来定义,且必须注明值的类型
  • 常量在声明它的作用域之中,常量在整个程序生命周期中都有效

在这里插入图片描述

4.1.2 隐藏(Shadowing)

  • 隐藏(Shadowing):通过使用 let,可以对一个不可变变量进行一些计算或者改变这个变量的类型,不过完成之后变量仍然是不可变的
  • 隐藏 与 将变量标记为 mut 的区别一:当不小心尝试对变量重新赋值时,如果没有使用 let 关键字,就会导致编译时错误
  • 隐藏 与 将变量标记为 mut 的区别二:当再次使用 let 时,实际上创建了一个新变量,因此可以改变值的类型,并且复用这个名字

在这里插入图片描述

4.2 数据类型

4.2.1 Rust 必须指定数据类型

在这里插入图片描述

4.2.2 标量类型

  1. 整型
    在这里插入图片描述
    在这里插入图片描述

  2. 浮点型(整数除法为地板除)
    在这里插入图片描述

  3. 布尔型
    在这里插入图片描述

  4. 字符型(size为4个字节;字符用单引号',字符串用双引号"
    在这里插入图片描述

4.2.3 复合类型

  1. 元组
  • 元组是一个将多个其他类型的值组合进一个复合类型的主要方式
  • 元组长度固定:一旦声明,其长度不会增大或缩小
  • 元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的
  • 访问元组值:可以使用点号 . 后跟值的索引来直接访问
  • 单元(unit) 元组:不带任何值的元组有个特殊的名称;这种值以及对应的类型都写作 (),表示空值或空的返回类型;如果表达式不返回任何其他值,则会隐式返回单元值

在这里插入图片描述

  1. 数组
  • 数组(array):与元组不同,数组中的每个元素的类型必须相同,且 Rust 中的数组长度是固定的
  • 创建数组:在方括号中包含每个元素的类型(type),后跟分号 ;,再后跟数组元素的数量
  • 访问数组:数组是可以在栈 (stack) 上分配的已知固定大小的单个内存块,可以使用索引来访问数组的元素

在这里插入图片描述

4.3 函数

  • fn 关键字:用来声明新函数;Rust 代码中的函数和变量名使用 snake case 规范风格(所有字母都是小写并使用下划线分隔单词)
  • 在函数签名中,必须声明每个参数的类型(type)
  • Rust 不关心函数定义所在的位置,只要函数被调用时出现在调用之处可见的作用域内就行
    在这里插入图片描述
  1. 参数
    在这里插入图片描述

  2. 语句和表达式

    • Rust 是一门基于表达式(expression-based)的语言
    • 语句只会执行操作,但不返回值;而表达式会计算出一个值
    • 注意:表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值!

在这里插入图片描述
在这里插入图片描述

  1. 函数返回值
  • 函数的返回值等同于函数体最后一个表达式的值(因此,大部分函数隐式的返回最后的表达式)
  • 使用 return 关键字和指定值,可从函数中提前返回

在这里插入图片描述

4.4 注释

  • //

4.5 控制流:if与循环

4.5.1 if 表达式

  1. 基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 在 let 语句中使用 if

  • 因为 if 是一个表达式,因此可以在 let 语句的右侧使用它,但两个分支必须是相同类型的值

在这里插入图片描述

4.5.2 loop 循环

  1. 基础
    在这里插入图片描述
  2. 带标签的 loop 循环
    • 用于在嵌套循环中 break 或 continue 指定循环(带上 loop 的前缀名)!

在这里插入图片描述

  1. 从 loop 循环返回值
  • break 后跟上返回值

在这里插入图片描述

4.5.3 while 循环

在这里插入图片描述

4.5.4 for 循环(遍历集合)

在这里插入图片描述

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

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

相关文章

基于卡尔曼滤波器的PID控制-1

采用M语言对算例进行仿真!!设置控制对象传递函数:取采样时间为1ms,采用Z变换将对象离散化,并描述为离散状态方程的形式:x(k 1) Ax(k) B(u(k)wk))y(k) Cx(k)带有测量噪声的被控对象输出为:yv(k)C…

Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细报错总结)

Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细)前期准备—环境依赖Cmake(编译器)依赖环境Python环境streamer环境图像处理依赖安装OpenCV编译OpenCV配置cmake编译参数make编译配置OpenCV动态库验证OpenCV环境# python环…

724. 寻找数组的中心下标——你行吗???

兄弟们,今早遇到了一个题,案例看起来很简单,于是就尝试起来,求知己😭题目描述724. 寻找数组的中心下标难度简单511收藏分享切换为英文接收动态反馈给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中…

一文了解 Java 中 so 文件的加载原理

前言 无论是 Android 开发者还是 Java 工程师应该都有使用过 JNI 开发,但对于 JVM 如何加载 so、Android 系统如何加载 so,可能鲜有时间了解。 本文通过代码、流程解释,带大家快速了解其加载原理,扫清困惑。 1. System#load() …

3.1.2 访问控制符及修饰符

文章目录1.访问控制符2.静态字段/方法/代码块2.1 静态字段2.2 静态常量2.3 静态方法2.4 特点2.5 static入门案例2.6 静态的调用关系2.7 静态代码块2.7.1 格式2.7.2 特性:2.7.3 执行顺序2.7.4 案例练习3.final的概念3.1 特点3.2 final入门案例1.访问控制符 在JAVA中…

【HBase——陌陌海量存储案例】8. 基于Phoenix消息数据查询(下)

索引示例二:创建本地索引 需求 在程序中,我们可能会根据订单ID、订单状态、支付金额、支付方式、用户ID来查询订单。所以,我们需要在这些列上来查询订单。 针对这种场景,我们可以使用本地索引来提高查询效率。 创建本地索引 cre…

超全小程序开发的学习 知识点

第一章:邂逅小程序开发 01_小程序开发和各个平台小程序的介绍 小程序加载的时候是双线程模型.wxml文件和wxss文件是一个线程,js和json文件是一个线程。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mEP3PUoo-1675132790458…

七步让您的MySQL服务器更安全

本文将以最常见的数据库管理系统——MySQL为例,向您介绍如何通过7步骤来安全加固数据库服务器。 不知您是否发现一种现象,那些初学渗透测试的人员往往过于关注应用的安全性,而对数据库的安全性不太重视。他们殊不知,没有数据库的…

上海亚商投顾:兔年首日开门红 北向资金净流入超186亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪两市早盘受外围影响大幅高开,随后指数高开低走,板块及个股相对活跃,汽车产业链&a…

视频图像分析处理流程(完整版)

来源:投稿 作者:LSC 编辑:学姐 一、视频分析处理的完整流程 (1)视频编解码的入门知识 尽管压缩工具五花八门,但是他们的目的都只有一个:都是为了减小文件的占用空间。 除去我们常见的.zip,.7z&#xff0…

MyBatis框架如何实现数据查询?有几种方法?

在实际开发中,查询操作通常都会涉及到单条数据的精确查询,以及多条数据的模糊查询。那么使用MyBatis框架是如何进行这两种查询的呢?接下来,本小节将讲解下如何使用MyBatis框架根据客户编号查询客户信息,以及根据客户名…

【前沿技术】在安全且可靠的区块链基础设施中运行业务条线应用

发表时间:2022年4月27日 信息来源:coingeek.com 了解特定企业的业务需求将使你能够构建出一个可扩容的业务条线应用,它将按照你想要的方式进行运作,并在不可篡改的BSV区块链中保存相关记录。 大多数企业都有一个业务条线&#xf…

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fid…

HashMap原理分析

HashMap原理分析JDK7 HashMap1、模型介绍2、底层实现原理3、描述一下put的过程4、HashMap扩容机制:5、HashMap中的循环链表是如何产生的6、HashMap和HashTable的区别7、HashMap为什么用红黑树而不用B树?JDK8 HashMapJDK7 HashMap 1、模型介绍 HashMap在…

18. time和calendar模块

当代码中需要使用到时间时,我们通常会使用time模块来获取当前时间或者时间戳。 时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 1. 时间戳 获取当前时间戳: import timeprint(time…

Springboot+vue预约上门维修服务系统

前端技术:nodejsvueelementui一般是采用前后端分离模式, 后端支持python/php/java/nodejs MTV模式 M:model,模型,负责与数据库交互 V:view,视图是核心,负责接收请求、获取数据、返回结果 T:template&…

并发编程学习(八):ReentrantLock特性、哲学家吃饭问题

ReentrantLock 是java.util.concurrent.locks包下的类。相对于synchronized,它具备如下特性:可中断。可以设置超时时间。可以设置公平锁。支持多个条件变量。即可以有个多个waitset等待队列。与synchronized都支持可重入。ReentrantLock的基本语法:// 获…

c++11 标准模板(STL)(std::multiset)(二)

定义于头文件 <set>template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using…

Day12【元宇宙的实践构想01】—— 元宇宙概念和发展历程

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍每日一句&#xff1a;【道固远&#xff0c;笃行可至&#xff1b;事虽巨&#xff0c;坚为必成】 &#x1f6a9; 今日留言&#xff1a;亮亮被迫去练科目二啦&#xff0c;定时…

K8S架构熟悉及日常操作

目录 一、架构介绍 二、组件介绍 三、调度介绍 四、CLI指令介绍 五、常见CLI指令 六、常见问题排查思路 一、架构介绍 Kubernetes系统架构为客户端/服务端&#xff08;C/S&#xff09;架构&#xff0c;Master作为服务端&#xff0c;Node作为客户端。 Master服务端也被称…