Rust语法学习 (基于Rustlings)(1):基础语法

本笔记用于自用。现在有一些高级功能未使用,导致现在忘记了。干脆整理了一下几个月前学rust语法时学习内容。本笔记基于rustling练习题中学习的知识。不是0基础的教程。

第一章:基础语法

本章对应《Rust编程语言》第3章内容,涵盖变量、函数、条件控制流和基本数据类型。


1. println! 宏与输出 (入门)

核心知识点

println! 宏:用于向控制台打印文本,是学习Rust的第一个宏。

rust 复制代码
println!("Hello, world!");  // 基本输出
println!("数字是: {}", 42);  // 格式化输出,{}是占位符
println!("x = {}, y = {}", 10, 20);  // 多个占位符

原始字符串(Raw String) :使用 r#"..."# 语法,内部的特殊字符不需要转义:

rust 复制代码
println!(r#"这是原始字符串,不需要转义\n"#);
println!(r#"可以包含"双引号"和\反斜杠"#);

空 println!:打印空行

rust 复制代码
println!();  // 输出一个空行

2. 变量与可变性 (§3.1)

核心知识点

Rust变量默认是不可变的,这是Rust安全性的基石之一。

rust 复制代码
let x = 5;          // 不可变变量
x = 6;              // ❌ 编译错误:不能修改不可变变量

使用 mut 关键字创建可变变量:

rust 复制代码
let mut x = 5;      // 可变变量
x = 6;              // ✅ 正确

变量遮蔽(Shadowing):可以用相同变量名重新绑定,甚至改变类型:

rust 复制代码
let x = 5;
let x = x + 1;     // 遮蔽,x = 6
let x = "six";     // 遮蔽,x变成字符串类型

常量 :使用 const 声明,必须标注类型,只能设为常量表达式:

rust 复制代码
const MAX_POINTS: u32 = 100_000;

3. 函数 (§3.3)

核心知识点

函数定义语法:

rust 复制代码
fn function_name(param1: Type1, param2: Type2) -> ReturnType {
    // 函数体
    // 最后一个表达式作为返回值(无需return)
}

关键规则:

  1. 参数必须标注类型
  2. 返回值类型在 -> 后声明
  3. 函数体最后一个表达式自动成为返回值(无分号)
  4. 使用 return 可以提前返回

语句 vs 表达式:

  • 语句 :执行操作但不返回值(如 let x = 5;)
  • 表达式 :计算并返回值(如 5 + 3、{ let x = 5; x + 1 })

for 循环(在函数练习中出现):

rust 复制代码
for i in 0..num {
    println!("Ring! Call number {}", i + 1);
}
  • 0..num 是范围表达式,生成从0到num-1的序列

4. 条件控制流:if 表达式 (§3.5)

核心知识点

if 表达式语法:

rust 复制代码
if condition {
    // 代码块
} else if another_condition {
    // 另一个代码块
} else {
    // 默认代码块
}

重要特性:

  1. 条件必须 是 bool 类型(不像某些语言可以是数字)
  2. if 是表达式,可以返回值
  3. 作为表达式使用时,所有分支必须返回相同类型

if 作为表达式:

rust 复制代码
let x = if true { 5 } else { 6 };  // x = 5

pub 关键字:表示函数/结构体是公开的,可以被外部代码访问

rust 复制代码
pub fn my_function() {  // 公开函数
    // ...
}

fn private_function() {  // 私有函数(默认)
    // ...
}

模块(mod):用于组织代码

rust 复制代码
mod tests {  // 定义模块
    use super::*;  // 导入父模块

    #[test]
    fn test_something() {
        // ...
    }
}

5. 基本数据类型 (§3.2, §4.3)

核心知识点

标量类型:

类型 说明 示例
bool 布尔值 true, false
char Unicode字符(4字节) 'a', '😄'
i8/i16/i32/i64/i128/isize 有符号整数 42
u8/u16/u32/u64/u128/usize 无符号整数 42u32
f32/f64 浮点数 3.14

复合类型:

类型 说明 示例
元组(Tuple) 固定长度,可包含不同类型 let t: (i32, f64, bool) = (1, 2.5, true);
数组(Array) 固定长度,所有元素同类型 let a: [i32; 5] = [1, 2, 3, 4, 5];

字符串 vs 字符:

  • char:单个Unicode字符,用单引号 'a',占4字节
  • &str:字符串切片,用双引号 "hello",是字符的序列
  • &'static str:具有整个程序生命周期的字符串切片(字符串字面量)

字符串字面量:

rust 复制代码
let s1: &str = "hello";        // 字符串切片
let s2: &'static str = "world"; // 静态生命周期

数组特殊语法:

rust 复制代码
let a = [3; 5];  // 创建[3, 3, 3, 3, 3]

切片(Slice):

rust 复制代码
let a = [1, 2, 3, 4, 5];
let slice = &a[1..3];  // [2, 3]
  • 包含起始索引,不包含结束索引
  • 切片类型是 &[T]

数组/切片常用方法:

  • .len():返回长度
  • .is_empty():是否为空
  • .iter():创建迭代器

元组解构:

rust 复制代码
let (x, y, z) = (1, 2.0, true);  // 解构元组

相关推荐
燕落南枝1 小时前
CSS 学习:类型选择器与 AI 注释实战
css·人工智能·学习
恒锐丰科技林技术员3 小时前
EG3525S 推挽半桥 PWM 控制芯片解析与工程应用
经验分享·嵌入式硬件·硬件工程
波力海苔夹心脆6754 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
一比七品牌咨询4 小时前
从“方案不落地”到“产线见效”:制造企业智能化转型品牌咨询服务商有哪些
经验分享·制造·品牌咨询
Swilderrr5 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
kkkkkkkkkk_Z5 小时前
新手自学嵌入式 | 学习日记:LCD显示原理、PWM控制、电容触摸屏(GT9147)驱动开发与项目实战
驱动开发·学习
SatanII5 小时前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
恒锐丰科技林技术员6 小时前
EG44273 低侧单通道栅极驱动芯片解析
经验分享·嵌入式硬件·硬件工程
程工造Agent6 小时前
从 0 到 1 学 Codex 源码:顺着 main 读懂 Rust 闭包与 async move
rust·ai编程
LXT7126 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习