03 用Rust编写一个猜数游戏

03 用Rust编写一个猜数游戏

------正文内容展示,开始汲取新知识啦------

Gucess Number

use std::io;//标准库的输入输出
use rand::Rng;//这里的Rng是一个trait(特征),定义了随机数生成器需要实现的方法集合
use std::cmp::Ordering;

fn main() {
    println!("Guess the number!");//打印宏
    
    let target = rand::thread_rng().gen_range(1, 101);
    //rand::thread_rng 返回一个特定的随机数生成器:它位于本地线程空间,并通过操作系统获得随机数字种子
    println!("target is {}",target);
    loop {
      println!("please input the number:");
        
      //使用变量来存储值,因为猜数是变动的,因此用 mut 声明变量,表明它是一个可变引用
      let mut guess = String::new();//new是String类型的一个关联函数,类似于java中的静态方法
      io::stdin().read_line(&mut guess)
          .expect("Failed to read line");//使用Result类型来处理可能失败的情况,Result是一个枚举类型
      let guess:u32 = match guess.trim().parse() {//使用同名新变量隐藏(shadow)旧变量
          Ok(num)=>num,
          Err(_)=>{
              println!("error,invalid param!");
              continue;
          },
      };
      match guess.cmp(&target){
          Ordering::Less => println!("small"),
          Ordering::Equal => {
              println!("win");
              break;
          },
          Ordering::Greater => println!("big"),
        }
    }
}

小注

Result

它拥有Ok和Err两个变体 ,其中Ok变体表明当前的操作执行成功,并附带代码产生的结果值。相应地,Err变体表明当前的当前的操作执行失败,并附带引发失败的具体原因。

变体对应的值也定义了一系列的方法,except()就是其一,except()在发生错误时会中断当前的程序,并将传入的字符串参数打印出来。

cargo doc –open

它可以在本地构建一份有关所有依赖的文档,并自动在浏览器中将文档打开以便查阅。

Ordering

它也是一个枚举类型,拥有Less,Greater,Equal 这三个变体,分别被用来表示比较两个数字之后可能会产生的3中结果。

match

match表达式由数个分支(arm)组成,每个分支都包含一个用于匹配的模式(pattern),以及匹配成功后要执行的相应的代码。

通过打印宏println!中的占位符输出对应的值

let x = 4;
let y = 5;
println!("x is {},y is {}",x,y);
//x is 4,y is 5

包(crate)

Rust中的包(crate)代表了一系列源代码文件的集合。我们构建的项目是一个用于生成可执行程序的二进制包(binary crate),相对应的还有用于复用功能的库包(library crate,代码包)。

引用依赖包

例:生成一个随机数字需要引用rand

Cargo.toml 文件[dependencies]区域下方添加依赖:

[dependencies]
rand = "0.3.14"

小注

Cargo.toml 文件中,从一个标题到下一个标题之间的所有内容都属于同一区域。这里的 [dependencies]区域被用来声明项目中需要用到的全部依赖包及其版本号。

在添加完依赖后,运行cargo build重新构建该项目,Cargo 会从注册表中获取所有可用库的最新版本信息,而这些信息通常是从 crates.io上复制过来的。Cargo 会在更新完注册表后逐条检查[dependencies]中的依赖,并下载当前缺失的依赖包。值得注意的是,Cargo会额外下载一份 libc 的数据,这是因为 rand依赖于 libc 来完成工作的。

升级依赖包

cargo update

update 命令会强制 Cargo 忽略 Cargo.lock 文件,并重新计算出所有依赖包中符合Cargo.toml 声明的最新版本。若命令执行成功,Cargo就会将更新后的版本号写入 Cargo.lock 文件,并覆盖之前的内容。

Caro.lock 文件在我们是用 cargo build 时就已经在项目目录下生成。当我们第一次构建项目时,Cargo 会依次遍历我们声明的依赖以及对应的语义化版本,找到符合要求的具体版本号,并将它们写入 Cargo.lock 文件中。再次构建项目时,Cargo 就会优先检索 Cargo.lock ,若文件中存在已经指明具体版本的依赖库,就会跳过计算版本号的过程,并直接使用文件中指明的版本。

若想回退版本或选择其他版本,就需要在 Cargo.toml 文件 [dependencies]区域下重新指定引用包的版本。

温馨提示:本文最后更新于2024-05-04 10:59:22,某些文章具有时效性,若有错误或已失效,请在下方留言或QQ联系站长
------正文内容展示,开始汲取新知识啦------

感谢您的访问,Ctrl+D收藏本站吧。

© 版权声明
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容