Rust - 包管理器


Cargo 是 RUST 的包管理器。这就像一个工具并管理 Rust 项目。

下表列出了一些常用的货物命令 -

先生编号 命令与说明
1

货物建造

编译当前项目。

2

货物检查

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

3

货物运行

构建并执行 src/main.rs。

4

货物干净

删除目标目录。

5

货物更新

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

6

货物新

创建一个新的货运项目。

Cargo 有助于下载第三方库。因此,它的作用就像一个包管理器。您还可以构建自己的库。安装 Rust 时默认安装 Cargo。

要创建一个新的货物项目,我们可以使用下面给出的命令。

创建一个二进制箱

cargo new project_name --bin

创建一个库箱

cargo new project_name --lib

要检查货物的当前版本,请执行以下命令 -

cargo --version

插图 - 创建一个 Binary Cargo 项目

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

第 1 步 - 创建项目文件夹

打开终端并输入以下命令Cargo new Guess-Game-App --bin

这将创建以下文件夹结构。

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

货物命令用于创建一个箱子。--bin标志指示正在创建的 crate 是二进制 crate。公共板条箱存储在名为 crates.io https://crates.io/的中央存储库中。

第 2 步 - 包含对外部库的引用

本例需要生成一个随机数。由于内部标准库不提供随机数生成逻辑,因此我们需要查看外部库或 crate。让我们使用rand crate,可以在 crates.io 网站crates.io上找到

https://crates.io/crates/rand是一个用于生成随机的 Rust 库。Rand 提供了生成随机数、将其转换为有用的类型和分布的实用程序,以及一些与随机性相关的算法。

下图显示了 crate.io 网站和 rand crate 的搜索结果。

外部库

将 rand crate 的版本复制到 Cargo.toml 文件rand = "0.5.5"

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

[dependencies]
rand = "0.5.5"

第三步:编译项目

导航到项目文件夹。在终端窗口上执行命令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 箱和所有传递依赖项(rand 的内部依赖项)将自动下载。

第 4 步 - 了解业务逻辑

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

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

  • 要求用户输入并猜测数字。

  • 如果数字小于生成的数字,则打印消息“Too low”。

  • 如果数字大于生成的数字,则会打印消息“Too high”。

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

第 5 步 - 编辑 main.rs 文件

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

use std::io;
extern crate rand; 
//importing external 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>(){ //remember to trim input to avoid enter spaces
         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 ..