#1、概述
从这期开始,我会以实际项目的形式,分享个人学习 Rust 语言的过程。期间,我不会讲太多语法知识,需要各位看官自行查阅文档😄。
开始前,需具备 Rust 环境(我用的是当前最新版本1.77.2
),可看上一篇文章:Rust 安装与版本更新。
#2、前期准备
#2.1、安装 RustRover
笔者 IDE 使用的是 JetBrains 出品的 RustRover,除了吃内存,没有什么缺点🙂。通常,我们可以用以下方式安装 RustRover:
- 在官网下载对应平台的安装包,傻瓜式安装
- 安装 JetBrains Toolbox,在工具里面点击安装
#2.2、新建项目
我们的项目名称为rust-journey
,使用 monorepo 结构进行项目开发,Cargo Workspaces 对此提供良好的支持。
项目创建后,我们需要修改自动生成的Cargo.toml
内容,删除原有配置,并键入如下信息:
toml
[workspace]
resolver = "2"
members = []
如果使用默认配置,会报no targets specified in the manifest
的错误。
至此,我们的工作空间就创建成功,下一步,需要新建子项目(包)。本文的项目是一个简单的猜数字游戏,取名为j01_number_game
,Rust 建议使用下划线小写字母的组合😄。
熟悉 CLI (命令行界面)的朋友,可以直接在根目录,执行cargo new j01_number_game
。或者在 IDE 中右键项目,选择New->Cargo Crate
,在弹出对话框键入包名即可。
工程结构如下:
#2.3、配置 Git
仓库地址:https://github.com/0604hx/rust-journey,同时配置.gitignore
文件:
shell
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
#3、项目实施
j01_number_game
实现一个经典的新手编程问题,猜猜看游戏:程序将会随机生成一个 1 到 100 之间的随机整数;接着它会请玩家猜一个数并输入,然后提示猜测是大了还是小了;如果猜对了,它会打印祝贺信息并退出;共有 5 次猜测机会。
#3.1、程序流程
#3.2、核心代码
rust
use std::cmp::Ordering;
use std::io;
use rand::Rng;
fn main() {
println!("欢迎来到 Rust 版猜数字游戏");
//创建随机数
let secret = rand::thread_rng().gen_range(1..=100);
let mut limit = 5;
println!("游戏开始(可尝试 {limit} 次),请输入你猜测的数字:");
loop {
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("读取用户输入失败");
let guess:u32 = match guess.trim().parse() {
Ok(num)=> num,
Err(e)=> {
println!("数值转换出错 {:?}", e);
continue
}
};
match secret.cmp(&guess).reverse() {
Ordering::Less => { println!("你猜的是 {guess} ,小了点噢,再猜下:") }
Ordering::Greater => { println!("你猜的是 {guess} ,大了点噢,再猜下:") }
Ordering::Equal => {
println!("恭喜,猜对了 O(∩_∩)O");
break
}
}
limit -= 1;
if limit <= 0 {
println!("没有可用次数,游戏结束,你没有获得胜利 =.=");
break
}
}
}
程序运行效果
#4、小结
对于习惯了 Java、JavaScript 这类语言的我,刚刚开始接触 Rust 语法,着实有点犯怵,觉得哪哪都别扭😂,需要一定的适应时间。
目前算是入门了🎉,下一步将进行 IO 操作。