From 52ddeb0462f9b9c3d0bee4933609ecc77fc59362 Mon Sep 17 00:00:00 2001 From: jaywcjlove Date: Fri, 11 Nov 2022 16:54:39 +0000 Subject: [PATCH] doc: update rust.md #50 #49 4ce6660ca82f4402d1d7db53599bac34ed6af5d5 --- docs/rust.html | 148 ++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 75 deletions(-) diff --git a/docs/rust.html b/docs/rust.html index a938ead5..72381cd9 100644 --- a/docs/rust.html +++ b/docs/rust.html @@ -42,7 +42,7 @@

Rust 快速参考备忘单,旨在为编写基本语法和方法提供帮助。

入门

Hello_World.rs

fn main() {
   println!("Hello, World!");
@@ -51,6 +51,7 @@
 

编译运行

$ rustc Hello_World.rs
 $ ./Hello_World
+
 Hello, World!
 

原始类型

@@ -385,41 +386,8 @@ // [92, 104, 101, 108, 108, 111]

Rust 动态数组

-

创建动态数组

-
let v: Vec<i32> = Vec::new();
-// 使用宏
-let v1 = vec![1, 2, 3];
-
-

读取元素

-
let v = vec![1, 2, 3, 4, 5];
-
-let element = &v[100];
-// panic,越界
-let element2 = v.get(100);
-println!("{:?}", element2);
-//None
-
-

遍历数组

-
    -
  1. -

    只读取数组中的元素

    -
    let v = vec![1, 2, 3];
    -for i in &v {
    -    println!("{}", i);
    -}
    -
    -
  2. -
  3. -

    遍历的同时修改数组中的元素

    -
    let mut v = vec![1, 2, 3];
    -for i in &mut v {
    -    *i += 10
    -}
    -
    -
  4. -
-

常用方法

- +

常用方法

+ @@ -478,6 +446,32 @@
-:-
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
+

创建动态数组

+
let v: Vec<i32> = Vec::new();
+// 使用宏
+let v1 = vec![1, 2, 3];
+
+

遍历数组

+

只读取数组中的元素

+
let v = vec![1, 2, 3];
+for i in &v {
+  println!("{}", i);
+}
+
+

遍历的同时修改数组中的元素

+
let mut v = vec![1, 2, 3];
+for i in &mut v {
+  *i += 10
+}
+
+

读取元素

+
let v = vec![1, 2, 3, 4, 5];
+let element = &v[100];
+// panic,越界
+let element2 = v.get(100);
+println!("{:?}", element2);
+//None
+

Rust 运算符

比较运算符

@@ -627,7 +621,7 @@ -
示例意义
c && d两者都是真的_(AND)_
`c
!cc 为假 (NOT)
+
示例意义
c && d两者都是真的 (AND)
c || d要么是真的 (OR)
!cc 为假 (NOT)

let (c, d) = (true, false);
 let and = c && d;  // => false
@@ -831,73 +825,76 @@
 
 

使用 .. 忽略剩余参数

struct Point {
-    x: i32,
-    y: i32,
-    z: i32,
+  x: i32,
+  y: i32,
+  z: i32,
 }
 
 let origin = Point { x: 0, y: 0, z: 0 };
 
 match origin {
-    Point { x, .. } => println!("x is {}", x),
+  Point { x, .. } => println!("x is {}", x),
 }
 

使用 _ 忽略部分参数

let hello = ('h', 'e', 'l', 'l', 'o');
 
 match hello {
-    (h, _, _, l, o) => {
-        println!("char: {}, {}, {}", h, l, o)
-    },
+  (h, _, _, l, o) => {
+      println!("char: {}, {}, {}", h, l, o)
+  },
 }
 

匹配命名变量

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

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

@ 绑定

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

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

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

match 1 {
-    num @ (1 | 2) => {
-        println!("{}", num);
-    }
-    _ => {}
+  num @ (1 | 2) => {
+      println!("{}", num);
+  }
+  _ => {}
 }
 

使用匹配守卫

-
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"),
+  Some(1) => println!("x = 1"),
+  Some(y) if y == 2 => println!("y = {:?}", y),
+  _ => println!("No match"),
 }// y = 2
 
+

Rust 函数

函数命名

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

@@ -905,29 +902,30 @@ println!("Hello, Quick Reference!"); }
-

参数值

+

参数值

+

rust 需要为函数的参数标明确定的类型

fn another_fn(a:u8, b: &str){
-    println!("我是 u8:{}", a);
-    println!("我是 &str:{}", b);
+  println!("我是 u8:{}", a);
+  println!("我是 &str:{}", b);
 }
 
 fn main(){
-    another_fn(10, "hello")
+  another_fn(10, "hello")
 }
 
-

返回值

+

返回值

+

如果不指定返回值,rust 默认返回 () 类型

// 在 bin 中的入口函数默认返回 ()
 fn main(){}
 
-
-

使用 -> 指定返回值,如果表达式在最后一行,无需使用 return

+

使用 -> 指定返回值,如果表达式在最后一行,无需使用 return

fn add(a:i32, b:i32) -> i32 {
-    if a + b < 100 {
-        return a - b;
-    }
-    a + b
+  if a + b < 100 {
+    return a - b;
+  }
+  a + b
 }
 

永不返回 !