前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust修仙笔记之炼气期

Rust修仙笔记之炼气期

作者头像
Maic
发布2024-01-26 19:50:59
890
发布2024-01-26 19:50:59
举报
文章被收录于专栏:Web技术学苑Web技术学苑
rust是一门静态类型语言,内存高效,速度快,在命令行webAssembly,网络服务,嵌入式,web3方向有广泛应用,以下是一篇rust入门笔记。

rust安装

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

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

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

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

我们的终端运行命令后

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

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

  • name 该项目的名称
  • version 版本号
  • edition 为年份
  • [dependencies]依赖安装的包
代码语言:javascript
复制
 
[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创建一个项目

代码语言:javascript
复制
 
cargo new guess-game

我们具体看下代码

代码语言:javascript
复制
 
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中是允许同一个变量名被定义多次的,最近的一次引用取最近的一次定义

比如下面

代码语言:javascript
复制
 
fn main() {
  let name = 'Web技术学苑';
  println!("{}", name); // Web技术学苑
  let name = "Maic";
   println!("{}", name); // Maic
}
  • 当我们使用循环时,我们使用了loop,使用{}代码块包裹
  • 在使用match时,match input.cmp($screct_number),并且接着代码块是非常奇怪的语法
代码语言:javascript
复制
 
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}中的参数名
代码语言:javascript
复制
 
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[2]

参考资料

[1]rust-lang: https://www.rust-lang.org/tools/install

[2]code example: https://github.com/maicFir/lessonNote/blob/master/rust/guess-game/src/main.rs

最后,看完觉得有收获的,点个赞,在看,转发,收藏等于学会,原创不易,欢迎关注Web技术学苑,好好学习,天天向上!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Web技术学苑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rust安装
  • 猜数游戏
  • println!
  • 总结
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档