《Rust编程语言》笔记之一
关于cargo
cargo runcargo buildcargo checkcargo new {project name}cargo doc --open: 构建本地及其依赖的文档
通用编程概念
如果需要使用关键字作为变量名称,在变量前加r#,比如r#match
变量与可变性
变量默认是不变的,可以使用mut关键字声明可变的变量:
1 | let mut x = 10; |
使用const声明常量,常量有几个特征:
- 不能使用
mut关键字 - 必须声明类型
- 习惯用大写字母加下划线命名
可以使用let关键字对一个变量多次声明,这样后面声明的变量会将第一个声明的变量隐藏,这种行为叫做隐藏(shadowing):
1 | let x = 10; |
数据类型
标量类型
整型
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8-bit | i8 | u8 |
| 16-bit | i16 | u16 |
| 32-bit | i32 | u32 |
| 64-bit | i64 | u64 |
| arch | isize | usize |
arch依赖计算机的架构,如果是 64 位的架构上,是 64 位,如果是 32 架构,是 32 位。
浮点数
有两种类型: f32,f64
复合类型
Rust中有两种复合类型: 元组(tuple)和数组(array)
元组
元组是一个将多个类型的值组合进一个复合类型的主要方式。
- 元组中的数据类型不必相同
- 元组可以使用
解构(destructing)对元组赋值 - 使用点号(
.)和下标识访问元组成员
1 | fn main() { |
数组
- 数组是定长的,声明后不能再改变数组的长度
- 数组中的元素的数据类型必须相同
- 如果越界访问数组,编译会报错
1 | let arr: [i32, 5] = [1, 2, 3, 4, 5]; |
函数
在rust中,使用snake case规范风格: 小写字母加下划线。
1 | fn say_something() { |
Rust 是一门基于表达式(expression-based)的语言。 // 注: 不理解
在 Rust 中,语句不返回值,因此不能把let语句复制给另外一个变量,如:
1 | let x = (let y = 10); // 报错: error: expected expression, found statement (`let`) |
- 函数调用是一个表达式,宏调用也是,
{}(代码块)也是 - 如果表达式后加分号,则是一个语句,如果不加,就是一个表达式,表达式是有返回值的
- 函数签名中必须声明每个变量的类型
()用来声明不返回值的函数
控制流
if
if中代码的条件必须是bool值if是一个表达式,所以可以在let语句的右侧使用if,但是,各个分支中的表达式的结果必须相同的数据类型
循环
Rust中有三种循环: loop, while, for
loop可以重复执行一段代码,直到遇到Ctrl + C或者break才会结束循环
小结
Rust中的控制流和其它语言中的比较类似,唯一比较特殊的是表达式的概念,比如,if是一个表达式语句,可以直接赋值给let,这一点挺有意思的。