在 Rust 中,变量是存储数据的基本单元,其声明和使用遵循独特的所有权和借用规则,以确保内存安全和并发安全。与其他语言不同,Rust 变量默认是不可变的,这有助于防止意外的数据修改。
变量声明
使用 let
关键字声明变量,基本语法为:let variable_name = value;。例如,声明一个整数变量:
let x = 5;
println!("{}", x);
// 输出: 5
注意:Rust 变量默认是不可变的,这意味着一旦赋值后,不能重新赋值。尝试修改
x 会导致编译错误。
可变变量
要声明可变变量,使用 let mut 关键字。这允许修改变量的值,例如:
let mut y = 10;
y = 20;
println!("{}", y);
// 输出: 20
可变变量在需要更新数据时非常有用,但应谨慎使用以避免数据竞争。
变量类型与推断
Rust 是静态类型语言,但编译器通常能自动推断类型。你可以显式指定类型,如:let z: i32 = 30;。以下示例展示类型推断:
let a = 3.14; // 推断为 f64
let b = true; // 推断为 bool
println!("a: {}, b: {}", a, b);
// 输出: a: 3.14, b: true
警告:如果类型不明确,编译器会报错。例如,let c = 42;
可能推断为 i32,但在某些上下文中需要显式类型。
变量作用域与所有权
变量作用域从声明点开始,到其所在块结束。Rust 的所有权系统确保每个值只有一个所有者,防止内存泄漏。示例:
{
let s = String::from("hello");
println!("{}", s);
} // s 在此处被丢弃,内存释放
// println!("{}", s); // 错误: s 已超出作用域
所有权规则是 Rust 的核心特性,理解它对于高效编程至关重要。
变量使用示例
变量可用于各种操作,如算术运算、条件判断和函数调用。下面是一个综合示例:
let mut count = 0;
count += 1;
if count > 0 {
println!("Count is positive: {}", count);
}
// 输出: Count is positive: 1
使用变量时,确保遵循借用规则,例如,不可变引用允许同时存在多个:
let data = 100;
let ref1 = &data;
let ref2 = &data;
println!("ref1: {}, ref2: {}", ref1, ref2);
// 输出: ref1: 100, ref2: 100