前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >34.Rust-变量绑定

34.Rust-变量绑定

原创
作者头像
面向加薪学习
修改2022-09-04 11:52:03
3650
修改2022-09-04 11:52:03
举报
文章被收录于专栏:面向加薪学习面向加薪学习

变量绑定默认是不可变的(immutable),但加上 mut 修饰语后变量就可以改变。

作用域和遮蔽

变量绑定有一个作用域(scope),它被限定只在一个代码块(block)中生存(live)。 代码块是一个被 {} 包围的语句集合。另外也允许变量遮蔽(variable shadowing)。

代码语言:txt
复制
    // 此绑定生存于 main 函数中
    let spend = 1;
    // 这是一个代码块,比 main 函数拥有更小的作用域
    {
        // 此绑定只存在于本代码块
        let target = "面向加薪学习";

        println!("inner short: {}", target);

        // 此绑定*遮蔽*了外面的绑定
        let spend = 2.0;

        println!("inner long: {}", spend);
    }
    // 代码块结束

    // 报错!`target` 在此作用域上不存在
    // error[E0425]: cannot find value `target` in this scope
    println!("outer short: {}", target);

    println!("outer long: {}", spend);

    // 此绑定同样*遮蔽*了前面的绑定
    let spend = String::from("学习时间1小时");

    println!("outer spend: {}", spend);

变量先声明

可以先声明(declare)变量绑定,后面才将它们初始化(initialize)。但是这种做法很 少用,因为这样可能导致使用未初始化的变量。

编译器禁止使用未经初始化的变量,因为这会产生未定义行为(?developer/article/2093417/undefined behavior)。

代码语言:txt
复制
    // 声明一个变量绑定
    let spend;

    {
        let x = 2;

        // 初始化一个绑定
        spend = x * x;
    }

    println!("spend: {}", spend);

    let spend2;

    // 报错!使用了未初始化的绑定
    println!("spend2: {}", spend2);
    // 改正 ^ 注释掉此行

    spend2 = 1;

    println!("another binding: {}", spend2);

冻结

资源存在使用的引用时,在当前作用域中这一资源是不可被修改的,称之为“冻结”。

代码语言:txt
复制
    let mut spend4 = Box::new(1);
    let spend5 = &spend4;
    spend4= Box::new(100);
    println!("{}", spend4);
    println!("{}", spend5);

    报错如下
    let spend5 = &spend4;
    ------- borrow of `spend4` occurs here
    spend4= Box::new(100);
    ^^^^^^ assignment to borrowed `spend4` occurs here
    println!("{}", spend4);
    println!("{}", spend5);
    ------ borrow later used here

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用域和遮蔽
  • 变量先声明
  • 冻结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com