2.1 猜数游戏:一次猜测
代码示例:
rust
use std::io;
fn main() {
println!("guess the number!");
println!("Please input your guess:");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
println!("You guessed: {}", guess);
}
首先我们声明了要使用标准库里面的io模块;然后第一次定义了一个变量guess,我们要注意Rust当中的变量默认都是immutable(一成不变)。如果我们需要声明一个变量,那么就需要使用mut关键字。
String是 Rust 标准库提供的动态字符串类型,它拥有所有权并且可以在堆上分配内存。String::new()是 String类型的一个关联函数(类似于静态方法),用于创建一个空的 String实例。
&mut是可变引用机制,引用允许你借用某个值而不获取其所有权。直接的引用在Rust当中默认也是不可变的。
{}是Rust中的占位符,一个{}就对应后面一个变量的值。
2.2 猜数游戏:生成神秘数字
下面这个命令可以帮我们在rust项目中添加库函数:
cargo add <name>
命令的实际效果是修改Cargo.toml文件:

Cargo.lock文件在首次构建项目的时候就会出现。
rust
use std::io; //prelude
use rand::Rng; //trait
fn main() {
println!("guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
println!("The secret number is: {}", secret_number);
// println!("Please input your guess:");
// let mut guess = String::new();
// io::stdin()
// .read_line(&mut guess)
// .expect("Failed to read line");
// println!("You guessed: {}", guess);
}
2.3 猜数游戏:比较猜测数字和神秘数字
rust
use std::io; //prelude
use rand::Rng; //trait
use std::cmp::Ordering; //enum
fn main() {
println!("guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
println!("The secret number is: {}", secret_number);
println!("Please input your guess:");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
//shadow机制可以隐藏变量,转变类型
//第一个guess已经被隐藏了
let guess: u32 = guess.trim().parse().expect("Please type a number!");
match guess.cmp(&secret_number) {
Ordering::Equal => println!("You win!"),
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
}
}
这里的Ordering是一个枚举类型,代表数字比较的三种不同结果。

这里还涉及到了shadow机制,后续进行补充说明。