blog.dopana

Back

Rust入门系列第二篇。Rust在变量声明和使用方式上格外讲究——这里的规则正是其安全性的根基。

变量默认不可变#

let name = "Ada";
name = "Grace";   // 错误:不能对不可变变量赋值两次
rust

这是有意为之:不可变数据易于推理,共享也安全。用 mut 让变量可变:

let mut score = 10;
score += 5;
rust

只在真正需要时使用 mut

类型推断#

Rust 能推断类型,也可以显式标注:

let count: u32 = 42;
let ratio: f64 = 3.14;
let name: &str = "Rust";
let done: bool = true;
rust

标量类型#

类型取值
整数i8..i128u8..u128(有/无符号)
浮点数f32f64
布尔bool
字符char(Unicode,4 字节)

默认整数类型是 i32,默认浮点类型是 f64

let x = 5;       // i32
let y = 2.5;     // f64
rust

复合类型#

元组(tuple)把任意类型的值组合在一起:

let point = (3, 5);
let (x, y) = point;   // 解构
println!("{}", point.0);   // 3
rust

数组(array)以固定长度保存多个同类型值:

let primes = [2, 3, 5, 7, 11];
println!("{}", primes[0]);   // 2
rust

常量#

const 值永远不可变,且必须有已知类型:

const MAX_SPEED: u32 = 120;
rust

let 不同,const 可以在任何作用域声明,并在编译期内联。

遮蔽(Shadowing)#

可以复用变量名来转换其值,新值生效前旧值仍然有效:

let x = 5;
let x = x + 1;
rust

遮蔽还能改变类型:

let label = "12";      // &str
let label = label.len();   // usize
rust

结论#

Rust 的变量规则——默认不可变、显式 mut、遮蔽——让数据流变得可预测。本系列下一篇:控制流。

参考资料#