第 2 天常见编程概念
变量
在 Rust 中使用 let
关键字声明变量,变量默认是不可变(immutable)的。
let
声明变量不需要指定变量的类型,但这并不意味着变量没有类型,编译器会自动根据变量的值推断出变量的类型。你也可以显式指定变量的类型。
rust
fn main() {
let x = 5;
println!("The value of x is: {}", x);
x = 6; // error: cannot assign twice to immutable variable `x`
}
如果想要变量可变,可以在变量前面加上 mut
关键字。
rust
fn main() {
let mut x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
Rust 这样设计的原因是,不可变变量更容易推理和理解,而且在编译时可以检查出很多错误。
常量
使用 const
关键字声明常量,常量必须指定类型。常量不同于变量,常量一旦声明就不能改变。不能对常量使用 mut
关键字。
常量可以在任何作用域中声明,包括全局作用域。常量的值只能被设为常量表达式,而不能是运行时才能计算的值。因为编译器是在编译时计算常量表达式的值。
常量名推荐使用大写字母和下划线分隔。
rust
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
隐藏
在 Rust 中,可以定义同名的变量,后面的变量会隐藏前面的变量。隐藏只在当前作用域有效。
rust
fn main() {
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("The value of x in the inner scope is: {x}");
}
println!("The value of x is: {x}");
}
// 结果为:
// The value of x in the inner scope is: 12
// The value of x is: 6
为什么需要隐藏?隐藏可以让我们在不改变变量名的情况下,对变量进行修改。避免取名的烦恼。
数据类型
Rust 是一种静态类型语言,编译器在编译时就知道每个值的类型。Rust 的数据类型分为两类:标量(scalar)和复合(compound)。
编译器通常会自动推断变量的类型,当变量的类型有多种可能时,必须增加类型注解。
rust
let guess: u32 = "42".parse().expect("Not a number!");