Rust
- 配置
- 下载
- 更新
- 卸载
- 安装验证
- 本地文档
- 编写Rust程序
- 编写
- 编译与运行
- rustc 只适合小程序
- Cargo
- 使用cargo创建项目 cargo new 项目名
- toml格式,是cargo的配置格式
- 在rust中,代码的包称作crate
- 构建cargo项目 cargo build
- 编译+运行cargo项目 cargorun
- 检查代码,确保能通过编译 但是不产生可执行文件,比build快得多
- 为发布构建 cargo build --release
- 猜测游戏
- 产生随机数
- 添加依赖
- 比较数字大小
- 循环
配置
下载
进入官网,点击install
更新
rustup update
卸载
rustup self install
安装验证
rustc --version
出现版本即为成功
本地文档
运行rustup doc可以在浏览器打开本地文档
编写Rust程序
编写
fn main(){
println!("hello world")
}
编译与运行
rustc 只适合小程序
rustc main.rs 编译(只适合简单的程序)
-win: .\main.exe
-linux\mac: ./main 运行
Cargo
使用cargo创建项目 cargo new 项目名
cargo new hello_cargo
会创建一个新的目录 hello_cartgo ,项目名也是hello_cargo
- Cargo.toml
- src目录
- —main.rs
- 初始化了一个新的git仓库 .gitgnore
toml格式,是cargo的配置格式
[package] 内容是用来配置包的
[dependencies] 列出项目的依赖项
在rust中,代码的包称作crate
- cargo生成的main.rs在src目录下
- 而Cargo.toml在项目顶层下
- 源代码都应该在src目录下
- 顶层目录可以放置:readme、许可信息、配置文件和其他与程序源码无关的文件
- 如果创建项目时没有使用cargo,也可以把项目转化为使用cargo:
把源代码移动到src下
创建cargo.toml并填写相应的配置
构建cargo项目 cargo build
编译+运行cargo项目 cargorun
检查代码,确保能通过编译 但是不产生可执行文件,比build快得多
为发布构建 cargo build --release
编译时会进行优化,代码会运行的更快,但是编译时间更长
会在target/release而不是target/debug生成可执行文件
两种配置
- 一个开发
- 一个正式发布
猜测游戏
- 建立项目 cargo new guessing_game
- let声明的变量是不可变得‘
- 加mut是可变的
- & 引用默认也是不可变的
- io::Result Ok,Err
- Except 如果接受到Error,就把用户的输入输出
- {} 是占位符
use std::io; //可以进行输入输出
fn main() {
println!("猜数");
println!("猜测一个数");
let foo=1;//变量不可变
let bar=foo;//immutable
let mut guess=String::new();//变量可变
io::stdin().read_line(&mut guess).expect("无法读取行");
println!("你猜测的数字是:{}",guess);
}
产生随机数
添加依赖
在cargo.toml中【dependencies】添加rand=“0.3.14”
use rand::Rng;
fn main() {
let secret_num=rand::thread_rng().gen_range(1,101);
println!("数字是{}",secret_num);
}
比较数字大小
//允许使用同名变量,覆盖原来变量
//将guess转换成int类型
let guess:i32=guess.trim().parse().expect("数据转换失败");
//类似于switch
match guess.cmp(&secret_num){
std::cmp::Ordering::Less => print!("小"),
std::cmp::Ordering::Equal => println!("相同"),
std::cmp::Ordering::Greater => println!("大"),
}
循环
loop
//将guess转换成int类型,使用match可以对转化错误时进行处理
let guess:i32=match guess.trim().parse(){
Ok(num)=>num,//接收的数据就是需要的数据
Err(_)=>continue,//下划线不关心错误信息
};