diff --git a/CONTRIBUTORS.svg b/CONTRIBUTORS.svg index f7345966..94128974 100644 --- a/CONTRIBUTORS.svg +++ b/CONTRIBUTORS.svg @@ -14,21 +14,23 @@ + + - + - + - + - + - + - + - + - + \ No newline at end of file diff --git a/docs/rust.html b/docs/rust.html index cdac12c5..d20714f9 100644 --- a/docs/rust.html +++ b/docs/rust.html @@ -45,24 +45,25 @@

入门

配置 vscode 调试

-

参考:https://github.com/vadimcn/vscode-lldb/blob/master/MANUAL.md#source-path-remapping

-

下载 CodeLLDB,选择 rust 自动生成 launch.json 文件

-
{
+

配置参考。下载 CodeLLDB,选择 rust 自动生成 launch.json 文件

+
{
   "configurations": [
-    // 添加一下行,使 vec、hashmap 等类型显示正常
+    // 添加一下行,使 vec/hashmap 等类型显示正常
     "sourceLanguages": ["rust"]
   ]
 }
 
+

将编译文件与标准库的位置进行映射

-
{
+
{
   "lldb.launch.sourceMap": {
     // 你自己的映射 hash 和映射路径
     "/rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f": "/Users/feiwu/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust"
   }
 }
 
+

Hello_World.rs

fn main() {
   println!("Hello, World!");
@@ -500,7 +501,7 @@
 
-:-
len()返回 vec 的长度
is_empty()vec 是否为空
push(value)vec 尾部插入元素
pop()删除并返回 vec 尾部的元素或者返回 None
insert(index,element)在指定索引处插入元素
remove(index)删除指定索引处的元素并返回被删除的元素,索引越界将 panic 报错退出
clear()清空 vec
append(vec)将另一个 vec 中的所有元素追加移入 vec 中,移动的 vec 变为空
truncate(len)vec 截断到指定长度,多余的元素被删除
retain(f)根据给定的函数,保留满足条件的元素
drain(range)删除 vec 中指定范围的元素,同时返回一个迭代该范围所有元素的迭代器
split_off(index)切分 vec,索引左边的元素保留在原 vec 中(含索引),索引右边的元素(不含索引)在返回的 vec

枚举

在结构体中使用枚举

-
enum IpAddrKind {
+
enum IpAddrKind {
   V4,
   V6,
 }
@@ -516,8 +517,9 @@
     };
 }
 
+

枚举的变体

-
enum IpAddrKind {
+
enum IpAddrKind {
   V4(u8, u8, u8, u8),
   V6(String),
 }
@@ -527,8 +529,9 @@
   let loopback = IpAddrKind::V6(String::from("::1"));
 }
 
+
-
enum Message{
+
enum Message{
   Quit,
   Move {x:i32, y:i32},
   Write(String),
@@ -541,8 +544,9 @@
   let c = Message::ChangeColor(10, 20, 30);
 }
 
+

模式匹配结构体

-
#[derive(Debug)]
+
#[derive(Debug)]
 enum Grade {
     A,
     B,
@@ -564,6 +568,7 @@
     subject_grade(Subject::Math(Grade::A));
 }
 
+

Rust 运算符

比较运算符

@@ -847,14 +852,14 @@

match

match 模式匹配,使用 a | b 表示匹配 a b,使用 _,表示匹配剩余所有选项

-
fn main(){
-    let grade = Grade::A;
-    match grade {
-        Grade::A => println!("Good"),
-        Grade::B => println!("Not bad"),
-        Grade::C | Grade::D => println!("Come on"),
-        _ => println!("emmm"),
-    }
+
fn main(){
+  let grade = Grade::A;
+  match grade {
+    Grade::A => println!("Good"),
+    Grade::B => println!("Not bad"),
+    Grade::C | Grade::D => println!("Come on"),
+    _ => println!("emmm"),
+  }
 }
 
 enum Grade {
@@ -866,19 +871,22 @@
     F,
 }
 
+

matches!

它可以将一个表达式跟模式进行匹配,然后返回匹配的结果 truefalse

-
assert!(matches!('x' ',A'..='Z' | 'a'..='z'));
+
assert!(matches!('x' ',A'..='Z' | 'a'..='z'));
 assert!(matches!(Some(101), Some(x) if x > 100));
 
+

if let 匹配

match 表达式需要匹配所有的枚举才能结束,但通常我们只需要匹配我们需要的值

-
let x = 3;
+
let x = 3;
 match Some(x) {
-    Some(3) => println!("I guess that x is 3"),
-    _ => ()
+  Some(3) => println!("I guess that x is 3"),
+  _ => ()
 }
 
+

使用 if let

let x = 3;
 if let Some(3) = Some(x) {
@@ -898,8 +906,9 @@
 

其它模式匹配

for 循环迭代器

-
for (i, v) in collection.iter().enumerate(){}
+
for (i, v) in collection.iter().enumerate(){}
 
+

let

let (x, _, y) = (1, 2, 3);
 println!("{x},{y}");
@@ -916,7 +925,7 @@
 

忽略参数

使用 .. 忽略剩余参数

-
struct Point {
+
struct Point {
     x: i32,
     y: i32,
     z: i32,
@@ -928,8 +937,9 @@
     Point { x, .. } => println!("x is {}", x),
 }
 
+

使用 _ 忽略部分参数

-
let hello = ('h', 'e', 'l', 'l', 'o');
+
let hello = ('h', 'e', 'l', 'l', 'o');
 
 match hello {
     (h, _, _, l, o) => {
@@ -937,6 +947,7 @@
     },
 }
 
+

匹配命名变量

以下代码,只要给定的 x 是 Some 类型,但 Some 中的值不是 1,都会匹配到 y

let x = Some(10);
@@ -949,14 +960,15 @@
 

@ 绑定

@ 运算符允许为一个字段绑定另外一个变量。

-
let grade = 'A';
+
let grade = 'A';
 match grade {
     good @ 'A'..='C' => println!("your grade is {}", good),
     _ => println!("Come on"),
 }
 
+
-
#[derive(Debug)]
+
#[derive(Debug)]
 struct Point {
     x: i32,
     y: i32,
@@ -967,6 +979,7 @@
     println!("{:?}", p);
 }
 
+

如果使用 |,需要使用 (),进行多个模式的绑定

match 1 {
@@ -977,13 +990,14 @@
 }
 

使用匹配守卫

-
let x = Some(2);
+
let x = Some(2);
 match x {
     Some(1) => println!("x = 1"),
     Some(y) if y == 2 => println!("y = {:?}", y),
     _ => println!("No match"),
 }// y = 2
 
+

Rust 函数

函数命名

rust 的函数使用蛇形命名法(snake case)

diff --git a/index.html b/index.html index 62444cb9..35a4afa7 100644 --- a/index.html +++ b/index.html @@ -454,9 +454,6 @@ DemigodLiu - - Jason Zhuang - JetSquirrel