Rust

  • 配置
  • 下载
  • 更新
  • 卸载
  • 安装验证
  • 本地文档
  • 编写Rust程序
  • 编写
  • 编译与运行
  • rustc 只适合小程序
  • Cargo
  • 使用cargo创建项目 cargo new 项目名
  • toml格式,是cargo的配置格式
  • 在rust中,代码的包称作crate
  • 构建cargo项目 cargo build
  • 编译+运行cargo项目 cargorun
  • 检查代码,确保能通过编译 但是不产生可执行文件,比build快得多
  • 为发布构建 cargo build --release
  • 猜测游戏
  • 产生随机数
  • 添加依赖
  • 比较数字大小
  • 循环


配置

下载

进入官网,点击install

rustdesk收费版本_rust

rustdesk收费版本_Rust_02

更新

rustup update

卸载

rustup self install

安装验证

rustc --version

rustdesk收费版本_rustdesk收费版本_03

出现版本即为成功

本地文档

运行rustup doc可以在浏览器打开本地文档

编写Rust程序

编写

fn main(){
    println!("hello world")
}

rustdesk收费版本_git_04

编译与运行

rustc 只适合小程序

rustc main.rs 编译(只适合简单的程序)

-win: .\main.exe

-linux\mac: ./main 运行

rustdesk收费版本_Rust_05

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

rustdesk收费版本_Rust_06

编译+运行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,//下划线不关心错误信息

        };