Rust 官方文档的 猜数字游戏 新手必看,我觉得学一门语言最重要的是先从简单的例子入手,触类旁通。
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..101);
loop {
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
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;
}
}
}
}
学习笔记
1.rust变量默认是常量如 let number ,加了mut就是变量 如 let mut guess
2.rust允许不显式声明变量类型,也就是说,编译器能推断出来类型,就不用写类型,如
let mut guess = String::new();
等价于
let mut guess: String = String::new();
其实我觉得这不是好事,某种程度上偷懒,这样阅读别人的代码会更费力
3.类型写后面干什么啊... 声明整数 let secret_number: u32 不能照着其他语言一样写前面吗,你整个let来声明变量不是多此一举,直接像C一样, int guess,又知道是整数 又知道是变量而不是函数... 引入了没用的fn 和let,我觉得这么设计语言不合理,虽然多写一步变量类型对 程序员“不友好”,但是对 程序 来说是友好的,提前知道了就不用去“猜”,不是更高效吗?后期review也更容易看得懂
对了 函数返回值也是写名字后边 太抽象了...
4. 别的语言虽然很多关键词不一样,但是大体上是统一的,rust全自己重命名,switch -> match 诸如此类。
今天先这样