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初始化的值是可变的,常量又是不可变的,因此一定不能同时使用,同时使用编译器也会报错)。