RUST特性之二:Shadowing 遮蔽 和作用域

博客介绍了Rust语言中变量的作用域和遮蔽(Shadowing)特性。变量作用域从定义开始,到所在层级的{}结束。当变量在{}内重新定义,新变量会遮蔽外部变量,在{}内使用该变量时,使用的是新定义的变量,且新变量定义时等号后的值仍取自外部变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然其他语言中也有类似的特性,想到读者接触过的语言可能比较广泛,还是把Shadowing拿出来说一下,也必须说一下作用域这个基础知识。

作用域很简单,一个变量的作用域是从定义它之后开始生效,到所在层级的{}结束的时候停止。除非... 它被遮蔽(Shadowing)了。

看下面这个程序:

程序中有两个x,一个是在main函数里定义的x,我们叫它外面的x。一个是在{}里面又定义了一遍的x,我们叫它里面的x

fn main() {
    let x = 5; //外部x进入作用域

    let x = x + 1; // 使用外部x

    {
        println!("Before inner X defined, the value of x is: {x}"); //外部x作用域中
        let x = x * 2; //内部x开始进入作用域,外部x开始被遮蔽
        println!("The value of x in the inner scope is: {x}"); //外部x被遮蔽,内部x在作用域中
    }//内部x作用域终止,外部x作用域恢复

    println!("The value of x is: {x}"); //外部x作用域中
} //外部x作用域停止

输出的结果是这样的:

$ cargo run
   Compiling variables v0.1.0 (file:///projects/variables)
    Finished dev [unoptimized + debuginfo] target(s) in 0.31s
     Running `target/debug/variables`
Before inner X defined, the value of x is: 6
The value of x in the inner scope is: 12
The value of x is: 6

里面的x=12。

外面的x,初始化=5,加了1,在里面的x定义之前是6。在{}之后还等于6,不会受到 {}里面x 的影响。

x在{}里面重新定义了之后,之后,之后,(重要的事情说三遍),里面的x 就“遮蔽”(shadowing)了外面的x,此时,在{}里面使用x,就是里面的x了,所以打印出来的 inner scope 的 x = 12。

里面的x定义中,中,中,中,即 let x = x * 2 这个语句中,等号后面的那个x还是外面的x的值 =6 哦。所以,里面的x才等于12。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值