Rust修仙笔记下境界-炼气期

rust是一门静态类型语言,内存高效,速度快,在命令行webAssembly,网络服务,嵌入式,web3方向有广泛应用,以下是一篇rust入门笔记。

开始学习rust的第一步

rust安装

  • 安装rust环境,具体参考官方install教程rust-lang
bash 复制代码
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 安装完成后开始第一个hello rust
bash 复制代码
cargo new 01-hello-rust --name hello-rust

当我们在终端执行以上命令后,就会生成下面几个文件

当我们在项目根目录执行cargo run,此时就运行了rust写的第一个项目了,并打印出了了main.rs文件

rust 复制代码
fn main() {
    println!("Hello, rust!");
}

我们的终端运行命令后

rust 复制代码
Finished dev [unoptimized + debuginfo] target(s) in 0.03s
 hellRunning `target/debug/hello-rust`
Hello, rust!

我们注意到在基础项目里有一个Cargo.toml的文件,这是在rust工程文件使用cargo创建项目后生成的文件,其中有默认的几个参数

  • name 该项目的名称
  • version 版本号
  • edition 为年份
  • [dependencies]依赖安装的包
rust 复制代码
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

当你使用cargo run时,此时src目录下除了原有的main.rs文件,也会多生成一个可执行main.exe文件

猜数游戏

首先我们使用cargo创建一个项目

rust 复制代码
cargo new guess-game

我们具体看下代码

rust 复制代码
use rand::Rng;
use std::io;

fn main() {
    println!("猜数字游戏");
    println!("请输入一个1到100之间的数字");
    // 用let定义了一个不可变的变量
    let secret_number = rand::thread_rng().gen_range(1..=100);
    // rust中的循环使用loop关键词
    loop {
        // 申明一个可变的变量,且为字符串类型存储输入值
        let mut input = String::new();
        // 使用io读取输入的值
        io::stdin()
            .read_line(&mut input) // 这里引用的上面同一个input的值
            .expect("failed to read line"); // 防止系统报错
         // 将输入的字符串变为数字
        let input: u32 = input.trim().parse().expect("Please type a number!");

        // 比较输入值与随机数的大小,这里使用match 关键词,&secret_number是一个形参
        match input.cmp(&secret_number) {
            // 使用Ordering的枚举
            std::cmp::Ordering::Less => println!("太小了!"),
            std::cmp::Ordering::Greater => println!("太大了!"),
            std::cmp::Ordering::Equal => {
                println!("恭喜你,猜对了!");
                break; // 中指退出loop循环
            }
        }
    }
}

至此我们一个猜数字的程序就已经写好了,看代码似乎还有很多疑问。

  • 首先我们在使用随机数时,主要是由于我们引入了use rand::Rng,在我们使用这个1-100随机数时,是直接使用定义了一个不可变量screct_number,rand::thread_rng().gen_range(1..=100)

在使用rand时,我们必须在Cargo.toml[dependencies]写入rand = "0.8.5",当我们首次运行时,就会安装rand相关的包

  • 我们在读取用户输入值时,我们使用了use std::io,在读取用户输入的值,我们使用io::stdin().read_line(&mut input)

  • 我们多次使用的input这个变量,在rust中是允许同一个变量名被定义多次的,最近的一次引用取最近的一次定义

比如下面

rust 复制代码
fn main() {
  let name = 'Web技术学苑';
  println!("{}", name); // Web技术学苑
  let name = "Maic";
   println!("{}", name); // Maic
}
  • 当我们使用循环时,我们使用了loop,使用{}代码块包裹

  • 在使用match时,match input.cmp($screct_number),并且接着代码块是非常奇怪的语法

rust 复制代码
match input.cmp($screct_number) {
  std::cmp::Ordering:Less => println!("太小了"),
  std::cmp::Ordering:Greater => println!("太大了"),
  std::cmp::Ordering:Equal => {
     println!("恭喜你,猜对了");
     break; // 中断loop循环
  }
}

Ordering:Less是引入的枚举,至于为啥这么写,还是需要慢慢适应 $screct_number是一个不可变的形参

println!

关于打印,我们在项目中主要是为了方便调试的,在rust中打印俗称

  • {}是占位符,可以{a}中的a是最近定义的变量
  • {0}{1}表示获取参数的第一个值与而个值
  • 可以定义{name}中的参数名
rust 复制代码
fn main() {
 // 输出后会换行
  println!("Hello, world!");
  // 不会换行
  // print!("hello i is print");

  // {},{}会一一占位hello world
  println!("{} {}", "hello", "world");

  // 0 hello 1 world
  println!("{0} {1} {0}", "a", "b");

  // 命名参数
  println!(
      "{name} likes to play {activity}",
      name = "John",
      activity = "Baseball"
  );
  // 输出的结果是:000001
  println!("{number:>0width$}", number = 1, width = 6);
}

总结

  • 如何安装rust,以最基础的例子hello rust入门rust

  • 猜数字游戏了解rust,我们使用stdrand这两个库实现了输入数字猜数游戏

  • 猜数字游戏中我们学习了解到如何定义可变变量与不可变量,以及如何使用循环,字符串转数字,以及使用Ordering枚举,中断循环等

  • 了解println!通用的打印,通常{}是一个变量占位符

  • code example

相关推荐
唐 城5 小时前
curl 放弃对 Hyper Rust HTTP 后端的支持
开发语言·http·rust
从善若水7 小时前
【2024】Merry Christmas!一起用Rust绘制一颗圣诞树吧
开发语言·后端·rust
gerrylon0077 小时前
rust学习: 有用的命令
rust
brrdg_sefg15 小时前
Rust 在前端基建中的使用
前端·rust·状态模式
m0_7482309416 小时前
Rust赋能前端: 纯血前端将 Table 导出 Excel
前端·rust·excel
SomeB1oody1 天前
【Rust自学】6.1. 定义枚举
开发语言·后端·rust
SomeB1oody1 天前
【Rust自学】5.3. struct的方法(Method)
开发语言·后端·rust
itas1092 天前
Rust调用C动态库
c语言·rust·bindgen·bindings·rust c绑定
SomeB1oody2 天前
【Rust自学】5.1. 定义并实例化struct
开发语言·后端·rust
m0_748236112 天前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust