Rust猜数游戏
学习记录下,包含了let
、match
、方法
、关联函数
、引用外部 crate
等知识!
整体体验:
- 异常处理与Java和Golang比较感觉更加灵活方便;
- 不用重复定义guessStr等名称的变量,可以直接重复赋值,也挺方便的。rust管这个叫
变量遮蔽
,遮蔽(shadow)
; - 可以使用箭头函数
=>
; - 不用的变量可以使用
_
忽略,和Golang一样; - 目前不爽的就是
println
等方法还要使用println!("xxx")
这样去使用。虽然知道!
意味着调用的是宏而不是普通的函数。
代码如下:
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("开始猜数游戏");
let secret_number = rand::thread_rng().gen_range(1..101);
// println!("系统选中的数字: {}", secret_number);
loop {
print!("请输入猜的数字.");
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("错误的读取");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("请输入正确的数字.");
continue;
}
};
println!("你猜的数字: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("小了"),
Ordering::Greater => println!("大了"),
Ordering::Equal => {
println!("猜对了!");
break;
}
}
}
}
运行结果:
> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 1.80s
Running `target\debug\guessing_game.exe`
开始猜数游戏
请输入猜的数字.
22
你猜的数字: 22
大了
请输入猜的数字.
10
你猜的数字: 10
大了
请输入猜的数字.
5
你猜的数字: 5
小了
请输入猜的数字.
6
你猜的数字: 6
小了
请输入猜的数字.
7
你猜的数字: 7
小了
请输入猜的数字.
8
你猜的数字: 8
猜对了!