Standard library & Prelude
Rust默认的标准库包含很多内容,其中prelude是自动导入的部分,是每个Rust程序都包含的标准库部分。Prelude
变量variables
可变变量(mutable) let mut
不可变变量( immutable)默认 let
常量Constants
const
变量遮蔽
//Rust默认的标准库包含很多内容,其中prelude是自动导入的部分,每个Rust程序都包含的标准库部分。
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
// 常量的定义用cost;
// 必须标注类型;
// 常量在程序运行的整个时间内有效,在声明它们的作用域内有效。
// const可以在全局作用域中使用,而let只能在函数中使用
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
//<-- shadowing 变量遮蔽,每次重新用let来定义相同的变量名;
// 结束作用域后返还;
// 定义新的遮蔽变量可以是不同数据类型;
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("The value of x in the inner scope is: {x}");
}
println!("The value of x is: {x}");
//--> shadowing 变量遮蔽
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
loop {
println!("Please input your guess.");
// 默认变量是不可变的(immutable);
// 使用mut关键字使变量成为可变变量;
// 不能给immutable变量赋值两次;
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;
}
}
}
}