Rust 入门程序解读

  • 概述
  • 代码

概述

本篇博客是对 Rust 官方提供的 a Guessing Game 的代码解读,所有的解读都以注释的形式出现在代码块中,让读者可以了解基本的关键字用法与程序语法。

Reference:https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html

代码

// main.rs
// "//" 是 Rust 中单行注释(comment)的开头// Rust 只在所有程序中添加少量的名称(https://doc.rust-lang.org/std/prelude/index.html)
// 故如果我们需要一些作用域之外的,需要使用 use 引入
use std::io;
use rand::Rng;  // Rust 没有实现随机数,但是其提供了一个 rand Crate;trait Rng 提供了一些随机数生成的实现
use std::cmp::Ordering;  // 与 Result 相似,Ordering 也是一个 enum// fn main() 函数是程序的入口
// () 意味着没有向 main 函数传入参数
// { 是函数体的开头
fn main() {// println! 是用于打印一行字符串的宏(macro)println!("Guess the number!");// gen_range(...) 函数接收一个 range expression// 1..101 等价于 1..=100// - 1..101  <=> [1, 101)// - 1..=100 <=> [1, 100]let secret_number = rand::thread_rng().gen_range(1..=100);println!("The secret number is: {}", secret_number);// loop 关键字 => 死循环loop {println!("Please input your guess.");// 在 Rust 中,使用 let 关键字声明的 variable 默认都是不可变的(immutable)// 如果希望 variable 可变,可以使用 mut 关键字进行声明// = 是赋值运算符// ::new 表示 new 是 String 的相关函数(associated function)let mut guess = String::new();// 在文件开头使用 use std::io 后,就可以使用 io 模块中的一些 I/O 函数了// io::stdin() 函数返回一个 std::io::Stdin 的实例,其负责处理来自终端(Terminal)的输入(Input)io::stdin()// read_line(...) 函数的参数是一个可变的字符串引用(&mut) // & 表示传入引用,使调用函数能直接访问该代码块,而不是进行在内存中进行(多次)复制.read_line(&mut guess)  // read_line(...) 返回一个类型为 io::Result 的实例// Rust 中有许多模块都有一个叫做 Result 的类型// Result 是一种 enumerations(枚举),其有 Ok 与 Err 两个 variants// - Ok 表示操作成功(在 Ok 中的值是方法返回的值)// - Err 表示操作出现异常// expect 方法会导致程序崩溃// 如果不进行相关处理(例如调用 expect 方法),Rust 会提示一个 warning,表示你未处理一个可能的异常.expect("Failed to read line.");// 由于 guess(String)不能与 secret_number(u32)进行比较(类型不一致),// 故需要先将 guess(String)重新声明为 guess(u32)// : u32 说明了 guess 的数据类型为 u32// parse() 方法返回一个 Resultlet guess: u32 = match guess.trim().parse() {Ok(num) => num,Err(_) => continue, // 下划线 _ 匹配所有的值}; // println! 中,出现在第一个字符串参数的 {} 代表 placeholder(占位符)println!("You guessed: {}", guess);// cmp 函数接收一个引用进行比较,返回一个 Ordering::Greater 实例// match expression 进行 pattern match(模式匹配)match guess.cmp(&secret_number) {Ordering::Less => println!("Too small!"),Ordering::Equal => {println!("You win!");break; // 当用户输入正确的数时,跳出循环} Ordering::Greater => println!("Too big!"),}}
}
# cargo.toml
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
rand = "0.8.3"

Rust 官方入门程序(a Guessing Game)解读相关推荐

  1. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

    rust 编程入门 Rust has been voted Stack Overflow's most loved programming language for five years in a r ...

  2. AFNnetworking快速教程,官方入门教程译

    AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...

  3. 04 分布式文件系统以及MapReduce入门程序

    文章目录 04 分布式文件系统以及MapReduce入门程序 分布式文件系统HDFS 1.分布式文件系统hdfs详细介绍 2.HDFS分布式文件系统设计目标 3.HDFS的来源 4.hdfs的架构图 ...

  4. Rust编程语言入门教程(一)-什么是Rust

    文章目录 Rust编程语言入门教程(一) 什么是Rust rust 发展历史 应用环境 为什么选择Rust 新项目用Rust还是Go? Rust编程语言入门教程(一) 什么是Rust wiki百科:h ...

  5. Python入门程序

    二.Python入门程序 2.1 Hello Python程序 2.1.1 Python 源程序的基本概念 1.Python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python的 ...

  6. WebAssembly运行时库(WASM runtime:wasmer 或 wasmtime)\将rust官方demo猜数字编译为WASI目标并使用Wasmer运行

    文章目录 WebAssembly运行时库(wasmer 或 wasmtime.wasmer-go) 一.引子 1. 什么是WASI 2. 有哪些优秀的 WebAssembly 运行时? 二.wasme ...

  7. 第三章 Python Kivy 学习 -- Kivy官方入门教程Pong Game

    系列文章目录 第一章 Python Kivy 学习 – Kivy介绍及环境安装 第二章 Python Kivy 学习 – Kivy项目开发原理(待编辑) 第三章 Python Kivy 学习 – Ki ...

  8. Rust学习入门(2):Rust通用的编程概念

    文章目录 通用的编程概念 变量与可变性 数据类型 标量类型 复合类型 函数和注释 控制流(if else) 控制流 (循环) 参考链接 通用的编程概念 变量与可变性 声明变量使用let关键字,默认情况 ...

  9. 微信小程序要这样去解读

    微信小程序要这样去解读 九个月之前张小龙的一次公开演讲第一次提到应用号,今天终于以小程序的名字正式对外小范围公测,只有200个邀请名额,我知道你肯定没有被翻牌子,我也没有.不管是朋友圈.订阅号.服务号 ...

最新文章

  1. go语言json的使用技巧
  2. erlang四种启动监控策略
  3. java 令牌解析_Java编程guava RateLimiter实例解析
  4. 二十二、linux定时器
  5. 给PUBG Mobile打上几十个数据标签解析霸榜原因
  6. 一个关于sql server索引与填充因子的链接
  7. openvino量化自己训练的yolov3模型至int8(有成功验证截图)
  8. module_param 用于动态开启/关闭 驱动打印信息
  9. 操作系统学习笔记-2.1.3进程控制
  10. 上海市消保委:春节长假期间 共受理消费者投诉4600件
  11. 后台管理系统 – 权限管理
  12. Java简单聊天室Socket服务器客户程序
  13. Delphi软件工程师试题
  14. 计算机一级win7win10,Win7/Win8.1升级Win10出现黑屏/蓝屏怎么办
  15. 为什么qq不出linux版本,腾讯QQ官方Linux版本要发布了
  16. 纸鸢|物联网云平台倒闭的原因和案例
  17. JAVA 抽象类与接口
  18. [转载] 刘迪: Stata空间溢出效应的动态图形 (空间计量)
  19. nvenc vs x264 对比(2)
  20. 摄影_焦点、对焦、对焦点

热门文章

  1. 计算机文件右击怎么显示打开方式,修复鼠标右键点击文件打开方式在win10中没有反应...
  2. 什么是 5G CPE
  3. 大家来学VIM(一个历久弥新的编辑器)
  4. IP地址分类/IP地址10开头和172开头和192开头的区别
  5. 房产行业数字化转型迷思:技术能提供何种助力?
  6. linux系统查询服务器型号,Linux系统查看服务器型号
  7. EXCEL数据改动自动标记功能怎么实现
  8. 1000个已成功入职的软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含真实简历模板)
  9. Nginx静态资源站点——Nginx虚拟主机
  10. 计算机为什么要学16进制,为什么人们通常用十六进制而不是二进制写计算机