《Rust编程语言》笔记之一
关于cargo
cargo run
cargo build
cargo check
cargo 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
,这一点挺有意思的。