Rust学习笔记

在2025年的暑假,打算学习Rust这门编程语言,就是闲的没事做,下面是我的一些闲笔总结

[快速入门 - 程序设计训练(Rust)]:清华大学Rust程序设计主页

[寻找牛刀,以便小试 - Rust语言圣经(Rust Course)]:Rust圣经

基本语法

1
2
3
4
fn main(){
let a: i32 = 5;
let mut a = 10;
}

首先就是Rust语言中的变量赋值:使用let语句,后加变量名,后加变量类型,最后赋值。可以前加mut关键字修饰这个变量是可变的,否则修改不可改变变量的值将引起编译错误。

Rust中的表达式

1
2
3
4
5
6
7
8
9
10
11
fn main() {
let a:i32 = 5;
let flag:bool = check(a);
print!("{}", flag);
}

fn check(number:i32) -> bool{
number % 2 == 0
//return number % 2 == 0;
//如果是return语法一定要加分号结尾
}

不同于我熟知的c,c++Rust语言中的函数体现了其模块化,作用域的思想,大概理解为:在一个{}内的代码基本上是完全独立的,因为终将返回一个值,于是既可以用return语法,也可以当作是一条简单的赋值语句。

有关基础语法的部分,我想是没必要详细罗列的,感兴趣的可以自行学习,在这里笔者单纯写一些自己认为Rust语言相对于笔者所熟悉的C与C++语言的新颖之处

Rust语言中的所有权和借用

这部分详细设计了Rust语言设计的初衷,为何其兼备内存安全性与高效性,建议提前学好计算机组成,对程序运行时的内存堆区栈区有一定的了解

复合数据类型

流程控制

结构体与方法

泛型与特征

语法部分

泛型就是为了满足:设计的函数支持不同类型数据做相同运算,使代码更加简洁

特征就是类似api一样实现了接口,将一种行为打包

下面是示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
extern crate text_io;
use text_io::read;

pub trait Info {
fn info(&self) -> String;
}

struct Paper {
pub author: String,
pub age: u32,
}

struct Article {
pub author: String,
pub date: String,
}

impl Info for Paper {
fn info(&self) -> String {
format!("The Paper's author is {} whose age is {}\n", self.author, self.age)
}
}

impl Info for Article {
fn info(&self) -> String {
format!("The Article's author is {} and it was published on {}", self.author, self.date)
}
}

fn main(){

}

动态数组

哈希表Hashmap

项目,库,模块

支线闲笔

Rust中的输入

前言:这个编程语言的输入实在是难用,被c++宠坏了的我难以接受,这里笔者只介绍最简单的一种

在项目配置文件Cargo.toml中添加第三方依赖text_io,注意read!()以空格和回车为分隔符

1
2
3
4
5
6
7
8
// Cargo.toml: 添加依赖 `text_io = "0.1.12"`
extern crate text_io;

fn main() {
// 类似 C++ 的 `cin >> x;`
let x: i32 = read!();
println!("x = {}", x);
}

Option枚举类型

Option类型作为Rust语言独有的一种数据类型,更像是一个结构体,支持程序执行时出现空类型的情况,保证了代码的安全性

1
2
3
4
enum Option<T> {
None,
Some(T)
}

变量Option或者有泛型T的值,或者为None

Result枚举类型