目录
常量
const 常量名:类型(u32)=100_000
下划线可以直接加在数字中 ,增加可读性
Shadowing 隐藏
let x
let x=1
数据类型
let var:u32 ;标注数据类型
标量类型
一个标量类型代表一个单一的值
Rust有四个主要的标量类型
- 整数类型
- 浮点类型
- 布尔类型
- 字符类型
整数类型
无符号整数类型以U开头
有符号整数类型以i开头
arch表示系统架构,由程序运行的计算机架构决定:
如果是64位计算机,那就是64位的
整数字面值
十进制、十六进制0x开头、八进制0o开头 、二进制0b开头、byte b开头
除了byte类型,所有数值字面值都允许使用类型后缀,例如 57u8
整数类型默认u32
整数溢出
调试模式下编译:Rust会检查整数溢出,如果发生溢出,程序在运行时就会panic
发布模式下(–release)编译:Rust不会检查可能导致panic的整数溢出
如果溢出发生:rust会发生”环绕“操作:
u8范围0-255,如果把u8值设成256,变成0;257变成1;
但是程序不会panic
浮点类型
Rust有两种基础的浮点类型,也就是含有小数部分的类型
- f32 32位 单精度
- f64 64位 双精度
- 默认双精度 ,速度差不多 ,精度更高
布尔类型
一个字节大小
符号是bool
字符类型
- char类型用来描述语言中最基础的单个字符
- 字面值使用单引号
- 占用四个字节大小
- 是unicode标量值,可以表示比ascii多得多的字符内容:拼音、中日韩文、零长度空白字符、emoji表情等。
复合类型
tuple
- 长度固定
- 创建 用,分开;各元素的数据类型不必相同
- let tup:(i32,f64,u8)=(500,6.4,1)
- println!("{},{},{}",tup.0,tup.1,tup.2)
获取tuple的元素值
可以使用模式匹配来解构一个tuple来获取元素的值
let tup:(i32,f32,u8)=(500,6.33,3);
println!("{},{},{}",tup.0,tup.1,tup.2);
访问tuple的元素
同上
数组(栈上)
- 长度固定
- 每个元素类型相同
- 【】,用逗号分开
- 数组没有Vector灵活
- Vector的长度可以改变
数组类型【类型;长度】
let a:[i32;5]=[1,2,3,4,5]
如果数组值相同
let a=【3;5】,他就相当于:let a=【3,3,3,3,3】
访问使用【】
数组越界,编译会通过,运行时会报错
函数
fn main(){
}
//函数名小写,用下划线隔开
fn another_function(){
}
函数参数
argument 传值的时候
parameter 声明函数时
参数必须指明类型
test1(5)//argument
fn test1(i:i64){//parameter`
语句与表达式
加;为语句,语句没有返回值
返回值就是函数体内最后一个表达式的值
提前返回,需要return。
输出结果为8
fn main() {
let x=test1(5);
println!("{}",x)//argument
}
fn test1(i:u64)->u64{//parameter
i+3
}
注释同c++
控制流
if else
if num < 10 {
println!("true");
}else{
println!("false");
}
if else if else
let condition=true;
let num =if condition{6}else{7};
if else可以跟在let后面
loop
- 可以使用break终止
- loop也可以跟在let后面
let mut num=9;
let num1 =loop{
num = num + 1;
//if num == 10{
break num ;
// }
};
println!("{}",num1);
while条件循环
while num!=0{
print!(" {} ", num );
num=num-1;
}
for循环(安全简洁)
比以上两个低错且高效
let a=[1,2,3,5];
for element in a.iter(){
println!("{} ",element);
}
range
指定开始数字和结束数字,range可以生成他们之间的数字(不含结束
rev方法可以反转range
for num in (1..4).rev(){
print!(" {}",num);
}
输出结果321
参考视频链接