Rust 学习笔记 1
世界,你好
1 | fn greet_world() { |
这是一个多国语言版的 world hello,至于为什么不是 hello world,详情参见Rust 语言圣经。
有其他语言基础的朋友应该很容易就能看懂这份代码,fn 用于声明函数,let 用于声明变量,{} 是占位符(可以自动识别类型)。
Rust 的集合类型不能直接循环,需要转换成迭代器(这里是通过 .iter() 方法),才能用于迭代循环。
在 2021 edition 及以后,支持直接写 for region in regions,因为 for 隐式地将 regions 转换成了迭代器。
变量绑定与解构
变量的绑定
1 | let x = 6; |
这里我们为变量 x 绑定了一个值,Rust 的变量默认是不可更改的(immutable),想要创建可以更改的变量则需要在绑定时加上 mut 关键字:
1 | let mut x = 6; |
不可变的变量会带来更好的安全性,而可变的变量则会带来更好的性能与灵活性。
变量的不可变性应该会让人联想到常量,不过这里的变量与常量有些许的不同:
- 常量不允许使用
mut。常量不仅默认不可变,而且始终不可变。 - 常量使用
const关键字,而不是let,并且常量的值和类型必须标注。
常量的声明:
1 | const MAX_POINTS: u32 = 100_000; |
使用下划线开头忽略未使用的变量:
1 | let _x = 6; |
如果我们绑定了变量而未使用,通常情况下 Rust 会给我们警告(warning),但是如果变量名以 _ 开头就不会出现警告。
变量的解构
1 | fn main() { |
这里的 (a, mut b) 就被解构成了 a 和 mut b 两个变量。不光绑定的时候可以解构,赋值的时候也可以结构:
1 | fn main() { |
这份代码的输出与上面的代码是一样的。
变量遮蔽
1 | fn main() { |
Rust 允许我们声明多个相同名字的变量,但是只有最后一个同名变量可以使用,这与可变变量不同,可变变量只能修改为相同类型的值,而变量覆盖就是开了一个新的变量,允许我们给这个同名的新变量完全不同的类型和值。