Rust的基础学习总结

学习的网站:
基础的库:https://rustwiki.org/zh-CN/std/index.html
rust中文文档:https://www.rustwiki.org.cn/docs/

//变量:
//格式:let (mut 可变变量) 变量名 (:变量类型) = 值      没有声明变量类型的时候,自动推导类型
//整形进制:字节:b'A' 

//常量:
//格式:const 变量名:类型 = 值

//if语句
//if 变量 {} 
//if 变量 {} else {}
//if 变量 {} else if 变量 {} else {}

//match匹配语句,match有返回值
/*
match 变量 {
    匹配值1 =>{},
    匹配值2 =>{},
    _ => (默认){}
}
*/ 
/*
let value=match 变量 {
    匹配值1 =>{},
    匹配值2 =>{},
    _ => (默认){}
}
*/ 

//for语句
//for 变量 in left..right(左闭右开) {}

//while 表达式 {}

//loop {} (死循环)

//两种字符串
//&str,静态的
//String类
/*常用的函数:
字符串连接符 +
格式化宏 format!
1.new()新构造一个对象 from()从字符串面量构造
2.to_string(&self) 将字符串字面量转换为字符串对象
3.replace() 搜索指定模式并替换
4.as_str() 将字符串对象转换为字符串字面量
5.push() 再字符串末尾追加字符
6.push_str() 再字符串末尾追加字符串
7.len() 返回字符串的字节长度
8.trim() 去除字符串首尾的空白符
9.split_whitespace() 根据空白符分割字符串并返回分割后的迭代器
10.split() 根据指定模式分割字符串并返回分割后的迭代器。
11.chars() 返回字符串所有字符组成的迭代器
*/

/*数组
let 数组名:[类型:大小] = [value1,value2,value3];
let 数组名 = [value1,value2,value3];
let 数组名:[类型:大小] = [-1;4]  默认值初始化:每一个元素指定初始值为 -1

//数组长度len()

//迭代数组iter()
for val int arr.iter(){}

//可变数组
let mut arr:[i32;4];

//数组传参
传值传递 就是传递数组的一个副本给函数做参数,函数对副本的任何修改都不会影响到原来的数组。
引用传递 就是传递数组在内存上的位置给函数做参数,因此函数对数组的任何修改都会影响到原来的数组。
fn 函数名(数组名:[数据类型;大小])
fn update(mut arr:[i32;3]){}
fn update(arr:&mut [i32;3]){}
*/

/*元组
let 元组名:(数据类型1,数据类型2,数据类型3) = (value1,value2,value3);
let 元组名 = (value1,value2,value3);

//访问元组元素:通过下标

//元组传参
fn 函数名(元组名:(数据类型1,数据类型2,数据类型3)){}

//元组解构赋值:把 元组 ( tuple ) 中的每一个元素按照顺序一个一个赋值给变量。
let b:(i32,bool,f64) = (30,true,7.9);
let (age,is_male,cgpa) = b; 
*/

/*切片:指向一段 内存 的指针,因此切片可用于访问内存块中连续区间内的数据。
内存中连续区间存储数据的 数据结构 有: 数组、向量、字符串。
let 切片名 = &数据[start_index..end_index] 左闭又开区间

//切片做函数参数
fn 函数名(切片名:&[i32]){}

//可变更切片,就是可以修改切片的变量,可以修改切片的内容
加&mut
*/

/*枚举
enum 枚举名字{
    value1,value2,value3
}
let selected = 枚举名字::枚举值;

//Option 枚举
Option 枚举代表了那种 可有可无 的选项。它有两个枚举值 None 和 Some(T)。

//判断枚举值只能用match ,使用if会报错
//枚举可以有不同的类型
enum GenderCategory {
    Name(String),Usr_ID(i32)

}
*/

/*向量vec:是一个长度可变的数组,它使用一段 连续的内存块 存储相同类型的元素
1.创建向量 let mut 变量名 =  Vec::new();
vec!() 宏来简化向量的创建 let vector_name = vec![val1,val2,val3]
2.push() 将某个值 T 添加到向量的末尾
3.remove() 删除并返回指定的下标元素。
4.contains() 判断向量是否包含某个值
5.len() 返回向量中的元素个数
*/

/*哈希表HashMap:键值对 的集合。哈希表中不允许有重复的键,但允许不同的键有相同的值。
1.HashMap::new()
2.insert() 插入/更新一个键值对到哈希表中,如果数据已经存在则返回旧值,如果不存在则返回 None
3.len() 返回哈希表中键值对的个数
4.get() 根据键从哈希表中获取相应的值
5.iter() 返回哈希表键值对的无序迭代器,迭代器元素类型为 (&'a K, &'a V)
6.contains_key 如果哈希表中存在指定的键则返回 true 否则返回 false
7.remove() 从哈希表中删除并返回指定的键值对
*/

/*哈希集合HashSet:是没有重复值的相同数据类型的值的集合。
HashSet::new();
函数同HashMap
*/

/*结构体struct
struct 名字{
    变量名1:类型,
    变量名2:类型
}
结构体变量
let 变量名 = 结构名{ };

//结构体充当函数变量
fn display(变量名:结构体名){}
//结构体充当返回值
fn display() -> 结构体名 { }

//结构体种定义方法:结构体方法只能定义在结构体的外面。
struct My_struct {}
impl My_struct { 
    // 属于结构体的所有其它代码
}

结构体的静态方法:直接通过结构体名调用而无需先实例化。唯一的不同点是 不需要使用 &self 作为参数。
*/

/*Rust错误处理
可以恢复的错误,和不可以恢复的错误,如果不可以恢复,会直接调用painic!()宏
1. panic!() 宏和不可恢复错误
可以恢复的错误,返回Result 枚举
1.捕捉错误
   match result {
  Ok(d)=>{
     println!("no is even {}",d);
  },
  Err(msg)=>{
     println!("Error msg is {}",msg);
  }

}

2.unwrap() 函数返回操作成功的实际结果。如果操作失败,它会调用 panic!() 并输出默认的错误消息。
3.expect() 当 self 是 Ok 或 Some 则返回包含的值。否则调用panic!() 输出自定义的错误并退出程序。
*/

猜你喜欢

转载自blog.csdn.net/simple_core/article/details/128039200