#0 前言
碎碎念
学rust可能和目前的任务没有关联,但是毕竟是编程原神,占个坑(
学习参考教程:https://www.bilibili.com/video/BV1m1sreSEoh
# 1 Rust 简介
rust 是一门低级别的系统语言
特点:性能、安全性、开发者友好、健壮的生态
- 内存安全,不牺牲性能
- 编译通过就能正常运行
# 2 Rust 程序结构
第一个项目
rust最终会创建crate,一个项目里包含:
一个library crate (库crate)
多个binary crate (可执行crate)
use std::io::stdin;
fn main() {
let mut msg = String::new();
println!("Please enter your message:");
stdin().read_line(&mut msg).unwrap();
println!("Message is {}", msg);
}
猜数字
导入库
Prelude:导入到每个rust程序的集合,可以直接使用而不用显式导入
use std::io;// 非prelude,需要显式导入
打印文本
println!("Guess the number");//宏
创建变量
let mut = String::new();
let:创建变量
mut:创建能多次赋值的变量
获取输入
io::stdin()
.read_line(&mut guess)// 传入引用,返回Result类型
.expect("Failed to read line");// 失败处理
Result:返回的result必须处理
— OK(usize)
— Err
导入rand库
/Cargo.toml
到[dependencies]加入:
rand = "0.8.5"
或者到终端使用
cargo add rand
获取库:crates.io网站获取
use rand::Rng;// Rng是trait(类似interface)
生成随机数
let secret_number = rand::thread_rng().gen_range(1..101);
范围表达式:
1…101:1\le num < 101
1…=100:1 \le num \le 100
类型转换
let guess:u32 = guess.trim().parse().expect("Please type a number!");
guess:u32:显式转换guess为u32类型(无符号整数类型)
shadowing(遮蔽):重新使用上面的guess变量
trim:去除空白
判断逻辑
use std::cmp::Ordering;
引入枚举Ordering
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}
match:类似switch,匹配分支并执行
cmp:比较大小,返回guess相对给定数是大了还是小了
完整程序
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..=100);
//println!("The secret number is: {}", secret_number);
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(_) => {
println!("Please type a number!");
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;
}
}
}
}