复合类型
复合类型可以把多个值放到一个类型里面
-Rust提供了两种复合类型:元组(Tuple)、数组
Tuple
Tuple可以将多个类型的多个值放在一个类型里面
-Tuple的长度是固定的:一旦声明就无法改变
# 创建Tuple
-在小括号里,将值用逗号分开
-Tuple中的每个位置都对应一个类型,Tuple中各元素的类型不必相同
# 获取Tuple的元素值
可以使用模式匹配:(destructrue)一个Tuple来获取元素的值
let tup:(i32,f64,u8) =(500,6.4,1)
let(x,y,z)=tup;
println!("{},{},{}",x,y,z);
# 访问Tuple元素
在Tuple变量使用标记法,后接元素的索引号
(例子)
数组
数组也可以将多个值放在一个类型里面
数组中每个元素的类型必须相同
数组的长度也是固定的
# 声明数组
在中括号中,各值使用逗号分开
# 数组的用处
如果想让你的数据存放在 stack (栈) 上而不是 heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处
数组没有Vector灵活
# 数组的类型
- 例如: let a: [i32; 5] =[1,2,3,4,5];
# 另一个声明数组的方式
如果数组的每个元素值都相同,那么可以在:
- 在中括号里指定初始值
- 然后是一个";"
最后是数组的长度
例如: leta=[3;5;它就相当于: let a =[3,3,3,3,3];
函数
声明函数使用fn 关键字
依照惯例,针对函数和变量名,Rust 使用 snake case 命名规范:- 所有的字母都是小写的,单词之间使用下划线分开
# 函数的参数
parameters,arguments
在函数签名里,必须声明每个参数的类型
# 函数体中的语句与表达式
函数体是由一系列语句组成,可选的由一个表达式结束
Rust是一个基于表达式的语言
语句是执行一些动作的指令
表达式会计算并产生一个值
函数的定义也是一个语句
语句没有返回值,所以不可能用let将一个语句赋给一个标量
# 函数的返回值
在-> 符号后边声明函数返回值的类型,但是不可以为返回值命名在
Rust 里面,返回值就是函数体里面最后一个表达式的值
若想提前返回,需使用 return 关键字,并指定一个值大多数函数都是默认使用最后一个表达式最为返回值
控制流
# if表达式
if表达式允许您根据条件来执行不同代码的分支
-这个条件必须是bool类型
if表达式中,与条件相关联的的代码块就叫分支(arm)
可选的:可以再后面加上一个else
# 使用else if处理多重条件
但如果,使用了多个else if,那么最好使用match来重构代码
在let语句中使用if
因为if是一个表达式,所以可以将它放在let语句中等号的右边
# Rush的循环
Rust提供了三种循环:loop,while,和for
# loop循环
loop关键字告诉Rust需要反复的执行一块代码,知道你喊停
可以再loop循环中使用break关键字,告诉程序何时停止循环
# while循环
另外一种常见的循环模式是每次执行代码之前都判断一次条件.
# for循环
我们可以使用while或者loop循环遍历集合,但是易错且低效
使用for循环更加简洁紧凑,它可以针对集合中的每个元素来执行一些代码
由于for循环的安全性、简洁性,所以他在Rust中使用的此时最多
# Range
标准库提供
指定一个开始数字和一个结束数字,range可以生成他们之间的数字(不含结束)
rev可以翻转range
struct
什么是struct
struct的定义
实例化struct
取值
字段初始化简写
struct更新语法
Tuple struct
Uint-Like struct
例子
struct更新语法
Tuple struct
定义方法
方法调用的运算符
关联函数