rustuse std::{cmp::Ordering, io};
use rand::Rng;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
// println!("The secret number is: {secret_number}");
loop {
println!("Please input your guess.");
// rust中,变量默认是不可变的
// 变量可变:mut
// let apples = 5; // 不可变
// let mut bananas = 5; // 可变
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
// read_line 的工作是,无论用户在标准输入中键入什么内容,都将其追加(不会覆盖其原有内容)到一个字符串中,返回一个类型为 Result 的值
// Result 是一种枚举类型,通常也写作 enum。
// Result 的成员是 Ok 和 Err,Ok 成员表示操作成功,内部包含成功时产生的值。Err 成员则意味着操作失败,并且包含失败的前因后果。
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("You guessed : {guess}");
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too Big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
变量默认不可变(?but为什么叫变量),若需要该变量可变,需要加上 mut
。
Rust 允许用一个新值来 隐藏 (Shadowing) guess
之前的值。这个功能常用在需要转换值类型之类的场景。它允许我们复用 guess
变量的名字,而不是被迫创建两个不同变量,诸如 guess_str
和 guess
之类。
&
表示这个参数是一个 引用(reference),它允许多处代码访问同一处数据,而无需在内存中多次拷贝。引用是一个复杂的特性,Rust 的一个主要优势就是安全而简单的操纵引用。完成当前程序并不需要了解如此多细节。现在,我们只需知道它像变量一样,默认是不可变的。因此,需要写成 &mut guess
来使其可变,而不是 &guess
Result
的成员是 Ok
和 Err
,Ok
成员表示操作成功,内部包含成功时产生的值。Err
成员则意味着操作失败,并且包含失败的前因后果。
Result
是一种枚举类型,通常也写作 enum。枚举类型变量的值可以是多种可能状态中的一个。我们把每种可能的状态称为一种 枚举成员(variant)。
match
语句一个 match
表达式由 分支(arms) 构成。一个分支包含一个 模式(pattern)和表达式开头的值与分支模式相匹配时应该执行的代码。Rust 获取提供给 match
的值并挨个检查每个分支的模式。match
结构和模式是 Rust 中强大的功能,它体现了代码可能遇到的多种情形,并帮助你确保没有遗漏处理。
类似于 switch
语句。
本文作者:Morales
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!