rust
是一门静态类型言语,内存高效,速度快,在指令行
,webAssembly
,网络服务,嵌入式,web3
方向有广泛应用,以下是一篇rust
入门笔记。
开端学习rust
的第一步
rust装置
- 装置
rust
环境,详细参考官方install教程rust-lang
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 装置完成后开端第一个
hello rust
cargo new 01-hello-rust --name hello-rust
当咱们在终端履行以上指令后,就会生成下面几个文件
当咱们在项目根目录履行cargo run
,此刻就运行了rust
写的第一个项目了,并打印出了了main.rs
文件
fn main() {
println!("Hello, 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]依靠装置的包
[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
创建一个项目
cargo new guess-game
咱们详细看下代码
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
中是允许同一个变量名被界说屡次的,最近的一次引证取最近的一次界说
比方下面
fn main() {
let name = 'Web技能学苑';
println!("{}", name); // Web技能学苑
let name = "Maic";
println!("{}", name); // Maic
}
-
当咱们运用循环时,咱们运用了
loop
,运用{}
代码块包裹 -
在运用
match
时,match input.cmp($screct_number)
,而且接着代码块是十分奇怪的语法
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}
中的参数名
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
,咱们运用std
与rand
这两个库实现了输入数字猜数游戏 -
在
猜数字
游戏中咱们学习了解到怎么界说可变变量与不行变量,以及怎么运用循环,字符串转数字,以及运用Ordering
枚举,中断循环等 -
了解
println!
通用的打印,一般{}
是一个变量占位符