Rust包管理器


Cargo是RUST的包管理器。

下表列出了一些常用的cargo命令:

Sr.No命令与说明
1

cargo build

编译当前项目。

2

cargo check

分析当前项目并报告错误,但不构建目标文件。

3

cargo run

生成并执行src / main.rs。

4

cargo clean

删除目标目录。

5

cargo update

更新Cargo.lock中列出的依赖项。

6

cargo new

创建一个新的cargo项目。

cargo可用于下载第三方库,也可以用来构建自己的库。当你安装Rust时,默认情况下会安装Cargo。

要创建一个新的cargo项目,可以使用下面给出的命令:

创建一个二进制crate

cargo new project_name --bin

创建一个库crate

cargo new project_name --lib

要检查cargo的当前版本,请执行以下命令:

cargo --version

例子-创建一个二进制Cargo项目


游戏会生成一个随机数字,并提示用户猜测该数字。

步骤1-建立专案资料夹

打开终端并输入以下命令 cargo new guess-game-app --bin,这将创建以下文件夹结构。

guess-game-app/
    -->Cargo.toml
    -->src/
        main.rs

cargo new命令用于创建crate,--bin 选项表示正在创建的crate是二进制crate,公共crate存储在名为crates.io的中央存储库中 https://crates.io/ .

第2步-引用外部库

此示例需要生成一个随机数,由于内部标准库不提供随机数生成逻辑,因此我们需要引用外部库或crate。rand是一个用于生成随机数的rust库,我们可在crates.io网站上找到https://crates.io/crates/rand。

将rand crate的版本复制到Cargo.toml文件的dependencies中,即rand =“ 0.5.5”。

[package]
name = "guess-game-app"
version = "0.1.0"
authors = ["Mohtashim"]

[dependencies]
rand = "0.5.5"

步骤3:编译项目

导航到项目文件夹,在终端窗口上执行命令cargo build

Updating registry `https:// github.com / rust-lang / crates.io-index`
Downloading rand v0.5.5
Downloading rand_core v0.2.2
Downloading winapi v0.3.6
Downloading rand_core v0.3.0
    Compiling winapi v0.3.6
    Compiling rand_core v0.3.0
    Compiling rand_core v0.2.2
    Compiling rand v0.5.5
    Compiling guess-game-app v0.1.0
    (file:// / E:/ RustWorks / RustRepo / Code_Snippets / cargo-projects / guess-game-app)
    Finished dev [unoptimized + debuginfo] target(s) in 1m 07s

rand crate和所有传递依赖项(rand的内部依赖项)将自动下载。

步骤4-了解业务逻辑

现在让我们看看数字猜谜游戏的业务逻辑是如何工作的:

  • 游戏最初会生成一个随机数;

  • 要求用户输入输入内容并猜测数字;

  • 如果数字小于生成的数字,则会显示消息“Too low”;

  • 如果数字大于生成的数字,则会显示消息“Too high”;

  • 如果用户输入程序生成的数字,则游戏退出。

第5步-编辑main.rs文件

将业务逻辑添加到main.rs文件。

use std::io;
extern crate rand; 
//导入外部crate
use rand::random;
fn get_guess() -> u8 {
    loop {
        println!("Input guess") ;
        let mut guess = String::new();
        io::stdin().read_line(&mut guess)
            .expect("could not read from stdin");
        match guess.trim().parse::<u8>(){ //记住trim输入以避免输入空白符
            Ok(v) => return v,
            Err(e) => println!("could not understand input {}",e)
        }
    }
}
fn handle_guess(guess:u8,correct:u8)-> bool {
    if guess < correct {
        println!("Too low");
        false

    } else if guess> correct {
        println!("Too high");
        false
    } else {
        println!("You go it ..");
        true
    }
}
fn main() {
    println!("Welcome to no guessing game");

    let correct:u8 = random();
    println!("correct value is {}",correct);
    loop {
        let guess = get_guess();
        if handle_guess(guess,correct){
            break;
        }
    }
}

第6步-编译并执行项目

确保终端指向项目目录,在终端上执行命令 cargo run。

Welcome to no guessing game
correct value is 97
Input guess
20
Too low
Input guess
100
Too high
Input guess
97
You got it ..