Rust 变量

7 阅读2分钟

变量声明与初始化

在 Rust 里,使用 let 关键字来声明变量。声明时可以选择初始化变量,如果不初始化,就需要显式指定变量的类型,因为编译器需要知道如何为其分配内存。

基本声明与初始化
fn main() { 
  // 声明并初始化一个变量
  let num = 42;
  println!("The value of num is: {}", num);
  // 声明变量并显式指定类型,暂不初始化
  let x: i32;
  x = 10;
  println!("The value of x is: {}", x);
}

变量的可变性

Rust 中的变量默认是不可变的,这意味着一旦变量被赋值,就不能再更改它的值。若要修改变量的值,需要使用 mut 关键字将其声明为可变变量。

不可变变量
fn main() {
  let num = 5;
  // 以下代码会导致编译错误
  // num = 6;
  println!("The value of num is: {}", num);
}
可变变量
fn main() {
  let mut num = 5;
  num = 6;
  println!("The value of num is: {}", num);
}
变量的作用域

变量的作用域决定了变量在代码中的可见性和生命周期。在 Rust 中,变量的作用域通常是从声明它的地方开始,到包含它的代码块结束。

fn main() {
  {
    let inner_num = 20;
    println!("Inner num: {}", inner_num); 
  }
  // 以下代码会导致编译错误,因为 inner_num 已超出作用域
  // println!("Inner num: {}", inner_num);
}

变量类型

Rust 是静态类型语言,每个变量都有一个确定的类型。编译器在编译时会进行类型检查,确保代码中的操作与变量类型相匹配。变量类型可以通过类型推断或显式指定来确定。

类型推断
fn main() {
  let num = 3.14;
  // 编译器推断 num 的类型为 f64
}
显式类型指定
fn main() {
  let num: u32 = 100;
}

变量所有权

所有权是 Rust 的核心特性之一,它用于管理内存和资源。每个值在 Rust 中都有一个变量作为其所有者,当所有者变量离开作用域时,值所占用的内存会被自动释放。

fn main() {
  let s1 = String::from("hello");
  let s2 = s1;
  // 以下代码会导致编译错误,因为 s1 的所有权已转移给 s2
  // println!("s1: {}", s1);
  println!("s2: {}", s2);
 }
引用和借用
fn main() {
  let s1 = String::from("hello");
  let len = calculate_length(&s1);
  println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
  s.len()
}