跟着谷歌学习Rust:第五课-Rust关键字

200 阅读1分钟

match(模式匹配)

#[rustfmt::skip]
fn main() {
    let input = 'x';
    match input {
        'q'                       => println!("Quitting"),
        'a' | 's' | 'w' | 'd'     => println!("Moving around"),
        '0'..='9'                 => println!("Number input"),
        key if key.is_lowercase() => println!("Lowercase: {key}"),
        _                         => println!("Something else"),
    }
}

Rust中模式匹配是通过match实现的,Rust中的match类似Java中的switch-case。都是模式匹配的实现。

但是match的默认值设置与switch-case还是不同,switch-case是default代码块后的为默认逻辑。 match中通过下划线_

static(静态类型关键字)

//初始化静态字符串
static BANNER: &str = "Welcome to RustOS 3.14";

fn main() {
    println!("{BANNER}");
}

定义静态关键字没有什么特别的点,跟Java中的实现相同都是static实现。

既然是static那么就代表定义的值是在任何地方都可以访问,因此static初始化的值都必须是可变类型(&)。

const(常量关键字)

//定义常量
const DIGEST_SIZE: usize = 3;
const ZERO: Option<u8> = Some(42);

fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {
    let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];
    for (idx, &b) in text.as_bytes().iter().enumerate() {
        digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);
    }
    digest
}

fn main() {
    let digest = compute_digest("Hello");
    println!("digest: {digest:?}");
}

前面说过初始化变量,变量的初始化是通过let关键字初始化的。要定义常量就使用const。

但是这里有一个问题点就是const和static不能同时使用(前面说过static初始化的值是可变的,常量又是不可变的,因此一定不能同时使用,同时使用编译器也会报错)。

参考

google.github.io/comprehensi… google.github.io/comprehensi…