【Rust】变量绑定

环境

  • Rust 1.55.0
  • VSCode 1.59.1

概念

参考:https://doc.rust-lang.org/stable/rust-by-example/variable_bindings.html

Rust 通过静态类型提供类型安全,可以在变量绑定时进行类型注释。
然而,在大多数情况下,编译器将能够从上下文中推断出变量的类型,大大减轻了注释负担。
使用 let 关键字进行变量绑定。

示例

变量申明

fn main() {
    let an_integer = 1u32;
    let a_boolean = true;
    let unit = ();

    // 复制一个变量
    let copied_integer = an_integer;

    println!("An integer: {:?}", copied_integer);
    println!("A boolean: {:?}", a_boolean);
    println!("Meet the unit value: {:?}", unit);

    // 变量没有使用的话,编译器进行警告,可以以下划线开头抑制编译器警告
    let _unused_variable = 3u32;
}

可变变量

变量绑定默认是不可变的,可以加上 mut 使其可变。

fn main() {
    let _immutable_binding = 1;
    let mut mutable_binding = 1;

    println!("Before mutation: {}", mutable_binding);

    mutable_binding += 1;

    println!("After mutation: {}", mutable_binding);

    // 错误,不可变变量
    // _immutable_binding += 1;
}

变量作用域

变量绑定有作用域,它被限制在一个代码块中生存,代码块是使用大括号包围的语句的集合。

fn main() {
    let long_lived_binding = 1;

    {
        let short_lived_binding = 2;
        println!("inner short: {}", short_lived_binding);
    }
    // 错误,已超出变量的作用域
    // println!("outer short: {}", short_lived_binding);
    println!("outer long: {}", long_lived_binding);
}

变量遮盖

重复申明变量可以使变量被遮盖。

fn main() {
    let shadowed_binding = 1;

    {
        println!("before being shadowed: {}", shadowed_binding);
        let shadowed_binding = "abc";
        println!("shadowed in inner block: {}", shadowed_binding);
    }
    println!("outside inner block: {}", shadowed_binding);

    let shadowed_binding = 2;
    println!("shadowed in outer block: {}", shadowed_binding);
}

变量提前申明

变量绑定可以先申明,后初始化。不过较少使用,可能会导致变量未初始化。

fn main() {
    let a_binding;

    {
        let x = 2;
        a_binding = x * x;
    }

    println!("a binding: {}", a_binding);

    let another_binding;

    // 错误,变量未初始化
    // println!("another binding: {}", another_binding);

    another_binding = 1;
    println!("another binding: {}", another_binding);
}

变量冻结

可以将可变的变量赋值给同名的不可变变量,由于变量遮盖,变量将不再可变,这叫变量冻结。

fn main() {
    let mut _mutable_integer = 7i32;

    {
        let _mutable_integer = _mutable_integer;

        // 错误,变量被冻结,不可变。
        // _mutable_integer = 50;
    }

    // 未被冻结
    _mutable_integer = 3;
}

总结

了解了 Rust 中的变量绑定,以及变量的可变,遮盖,冻结,提前申明等。

附录

posted @   jiangbo4444  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-11-30 spring-boot 环境搭建(一)
点击右上角即可分享
微信分享提示