Rust之通用编程

news2024/12/23 23:34:25

1、变量与可变性:

在Rust语言中,变量默认是不可变的,所以一旦变量被绑定到某个值上面,这个值就再也无法被改变。
可以通过在声明的变量名称前添加mut关键字来使其可变。除了使变量的值可变,mut还会向阅读代码的人暗示其他代码可能会改变这个变量的值。

2、数据类型:

(1)、标量类型:

a、整数:

在Rust中的整数类型:
在这里插入图片描述
在Rust中的整数字面量:
在这里插入图片描述
在Rust中,默认使用的类型是i32

b、浮点数:

在Rust中的浮点数分为f32f64两种类型,其分别对应单精度浮点数和双精度浮点数。

c、布尔值:

Rust的布尔类型只拥有两个可能的值:truefalse,它会占据单个字节的空间大小。可以使用bool来表示一个布尔类型。

d、字符:

在Rust中,char类型被用于描述语言中最基础的单个字符。
Rust中的char类型占4字节,是一个Unicode标量值,这也意味着
它可以表示比ASCII多得多的字符内容。拼音字母、中文、日文、韩文、零长度空白字符,甚至是emoji表情都可以作为一个有效的char类型值。

(2)、复合类型:

a、元组:

元组是一种常见的复合类型,可以将其他不同类型的多个值组合进一个复合类型中。元组拥有固定的长度,无法在声明结束后增加或减少其中的元素数量。

  • 解构:将元组中的数据解析出来的操作。例如:
fn main() { 
	 let tup = (500, 6.4, 1); 
	 let (x, y, z) = tup; 
	 println!("The value of y is: {}", y); 
}

这段程序首先创建了一个元组,并将其绑定到了变量tup上。随后,let关键字的右侧使用了一个模式将tup拆分为3个不同的部分:x、y和z。最后,程序将变量y的值。

  • 通过点号(.)来访问元组中的值,例如
fn main() { 
	 let x: (i32, f64, u8) = (500, 6.4, 1); 
	 let five_hundred = x.0; 
	 let six_point_four = x.1; 
	 let one = x.2; 
} 

这段程序首先创建了一个元组x,随后又通过索引访问元组的各个元素,并将它们的值绑定到新的变量上。

b、数组:

可以在数组中存储多个值的集合。与元组不同,数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。
在Rust中,你可以将以逗号分隔的值放置在一对方括号内来创建一个数组。

i、数组初始化的方法:

  • 使用一对方括号,并在方括号中填写数组内所有元素的类型、一个分号及数组内元素的数量,例如:
let a: [i32; 5] = [1, 2, 3, 4, 5];//的i32便是数组内所有元素的类型,而分号之后的5则表明当前的数组包含5个元素。
  • 假如你想要创建一个含有相同元素的数组,那么你可以在方括号中指定元素的值,并接着填入一个分号及数组的长度,例如:
let a = [3; 5]

ii、访问数组:

通过索引来访问一个数组中的所有元素,例如:

fn main() { 
 let a = [1, 2, 3, 4, 5]; 
 let first = a[0]; 
 let second = a[1]; 
}

在这个例子中,first变量会被赋值为1,这正是数组中索引[0]对应的那个值。同样,second变量将获得数组中索引[1]对应的那个值,也就是2。

3、函数:

在Rust中,可以使用fn来声明一个新的函数。
Rust中使用蛇形命名法来作为规范函数和变量名称的风格。蛇形命名法只使用小写字母来进行命名,并以下划线分割单词。
在Rust中,函数定义以fn关键字开始并紧随函数名称与一对圆括号,另外还有一对花括号用于标识函数体开始和结尾的地方。
使用函数名加圆括号来调用函数。

(1)、函数参数:

当函数存在参数时,需要在调用函数的时候为这些参数提供具体的值。
在函数签名中,必须显式地声明每个参数的类型。由于类型被显式地注明,因此编译器不需要通过其他部分的代码进行推导就能明确地知道编程者的意图。

(2)、函数体中的语句和表达式:

在Rust中,语句和表达式为两个不同的概念。语句是指那些执行操作但是不返回值的指令,表达式是指那些进行计算并产生一个值作为结果的指令。
在表达式的结尾没有;,而在语句的结尾有;,当在表达式的结尾加上;,表达式就会变成语句,而不会返回任何值。

(3)、函数的返回值:

函数可以调用它的代码返回值,不用为返回值命名,但是需要在箭头符号(->)的后面声明它的类型。在Rust中,函数的返回值等同于函数体最后一个表达式的值。也可以使用return关键字并指定一个值来提前从函数中返回,但大多数函数都是隐式地返回了最后的表达式。

4、控制流:

通过条件来执行或重复执行某些代码,在Rust中,用来控制程序执行流的结构主要就是if表达式循环表达式

(1)、if表达式:

if表达式允许我们根据条件执行不同的代码分支。

(2)、使用循环重复执行代码:

a、使用loop重复执行:

可以使用loop关键字来指示Rust反复执行某一块代码,直到显式地声明退出为止。

b、while条件循环:

在每次执行之前都判断一次条件,假如条件为真则执行代码片段,假如条件为假或在执行过程中遇到break就退出当前循环。

c、for循环:

示例:

fn main() { 
	let a = [10, 20, 30, 40, 50]; 
	for element in a.iter() { 
		println!("the value is: {}", element); 
	} 
}

使用for循环遍历数组。

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

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

相关文章

“C++基础入门指南:了解语言特性和基本语法”

C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式 等。熟悉C语言之后,对C学习有一定的帮助 文章目录 C命名风格C关键字(C98)C命名空间命名空间定义命名空间使用命名空间的使用有三种方式&#xff…

Android - 集成三方模组原厂WiFi Hal库问题

Android - 集成三方模组原厂WiFi Hal库问题 最近Android 11产品平台上需要集成三方WiFi/AP模组厂商提供的hal静态库时遇到一个问题:将三方的库代码集成进系统,并正确配置、编译出lib_driver_cmd_xxx.a(xxx一般是厂商的名字缩写,仅仅是个后缀用…

gazebo simulation

<?xml version"1.0" ?> <!-- --> <!-- | This document was autogenerated by xacro from /home/xrh/ros-project/gazebo_test/src/fmauch_universal_robot/ur_description/urdf/ur3_D455_2f140.urdf.xacro | --> <!-- | EDITING THIS…

C++---string

String C语言中的字符串和C中的string类标准库中的string类string类的常用接口string类对象的常见构造string类对象的容量操作string类对象的访问及遍历操作 C语言中的字符串和C中的string类 在C语言中&#xff0c;字符串是一个字符数组&#xff0c;它以空字符\0结尾&#xff…

【进程7】 2.15 有名管道介绍及使用 2.16有名管道实现简单版聊天功能

2.15 有名管道介绍及使用 有名管道&#xff08;FIFO first in first out&#xff09; 有名管道也可用于具有亲缘关系的进程之间&#xff0c;底层数据结构也是环形队列、循环队列。 有名管道的使用 unlink用于删除一个文件。 创建fifo文件 命令&#xff1a; 文件类型p&…

Android-WebRTC-双人视频

省略开启本机摄像头的过程 以下和WebSocket通信的时候&#xff0c;是通过Gson转对象为字符串的方式传输的数据 整个过程 layout_rtc.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:and…

汽车ECU刷机笔记

汽车ECU刷机笔记 ECU简介ECU刷机的意义点火提前角点火延迟角调整意义 常见刷ECU的方法:成本价格1.通过obd汽车诊断口读写数据2.bdm后台调试模式3.BENCH刷写4.BOOT需要拆开电脑板&#xff0c;焊接电路 ECU刷写程序读取数据OBD tools(汽车诊断器)蓝牙ODB诊断器&#xff1a; 读写设…

<j-editable-table 隐藏一列表格数据

&#xff1c;j-editable-table 隐藏一列表格数据 隐藏条码 本来列代码是这样的 {title: 条码, key: barCode, width: 15%, type: FormTypes.input, defaultValue: , placeholder: 请输入${title},validateRules: [{ required: true, message: ${title}不能为空 },// { pattern…

二分搜索树的特性

一、顺序性 二分搜索树可以当做查找表的一种实现。 我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor&#xff08;后继&#xff09;、predecessor&#xff08;前驱&#xff09;、floor&#xff08;地板&#xff09;、ceil&#xff08;天…

leetcode 699. 掉落的方块(java)

掉落的方块 leetcode 699. 掉落的方块题目描述线段树解法代码演示 leetcode 699. 掉落的方块 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/falling-squares 题目描述 在二维平面上的 x 轴上&#xff0c;放置着一些方块…

jmeter软件测试实验(附源码以及配置)

jmeter介绍 JMeter是一个开源的性能测试工具&#xff0c;由Apache软件基金会开发和维护。它主要用于对Web应用程序、Web服务、数据库和其他类型的服务进行性能测试。JMeter最初是为测试Web应用程序而设计的&#xff0c;但现在已经扩展到支持更广泛的应用场景。 JMeter 可对服务…

Linux系统入门之-系统编程【open、close函数】

继上一篇环境配置后就正式开始系统编程 RK3568开发板入门之-tftp&nfs的配置 open的使用&#xff0c;使用之前可以先在Ubuntu下查看帮助&#xff0c;了解open的使用和语法&#xff0c;如下&#xff1a; man 2 open对于open函数 *pathname&#xff1a;要打开的文件路径 f…

【JavaWeb】Tomcat底层机制和Servlet运行原理

&#x1f384;欢迎来到dandelionl_的csdn博文&#xff0c;本文主要讲解Java web中Tomcat底层机制和Servlet的运行原理的相关知识&#x1f384; &#x1f308;我是dandelionl_&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一…

Revisiting Personalized Federated Learning:Robustness Against Backdoor Attacks

ACM SIGKDD Conference on Knowledge Discovery and Data Mining 2023 秦泽钰&#xff0c;香港科技大学计算机科学与工程系博士生&#xff0c;联邦学习中个性化的额外增益&#xff1a;对于后门攻击的鲁棒性 https://github.com/alibaba/FederatedScope/tree/backdoor-bench 摘要…

MySQL两种安装方式

数据库&#xff1a; 一、 二、 三、 四、 五、MySQL的两种安装方式 .zip包的安装方式&#xff1a; .msi方式安装的需要到控制面板卸载 密码默认是空密码 5.7和8.0开始&#xff1a;加强安全相关操作&#xff0c;安装有所不同 前三步一样&#xff0c;第四步在cmd&#xff0c;以…

windows系统安装异构虚拟机arm版的银河麒麟服务器

下载qemu UEFI&#xff08;BIOS的替代方案&#xff09;的下载地址&#xff1a;http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd QEMU 软件的下载地址&#xff1a;https://qemu.weilnetz.de/w64/2021/qemu-w64-setup-20210505.exe …

Docker详解及常用命令介绍

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

【5】构建手写数字模型

1 mnist数据集 下载数据集&#xff1a; 手动下载&#xff1a;MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges tf程序下载&#xff1a; tensorflow2.x将数据集集成在Keras中。tensorflow2.0&#xff0c;更新删除了input_data的函数。 import…

19.主题时钟

主题时钟 html部分 <div class"btn">黑色</div><div class"clock-container"><div class"time">21</div><div class"date">21</div><div class"clock"><div class&qu…

经典面试题(力扣,接雨水)

接雨水 方法一思路测试代码复杂度测试结果 方法二思路测试代码复杂度测试结果 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…