rust遮蔽(shadow)示例代码

rust 复制代码
fn main() {
    let x = 5;

    let x = x + 1;
    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {}", x);
    }
	//x=10; //这样写会编译报错
    println!("The value of x is: {}", x);
}

这个程序首先将数值 5 绑定到 x。然后通过重复使用 let x = 来遮蔽之前的 x,并取原来的值加上 1,所以 x 的值变成了 6。在内部作用域内,第三个 let 语句同样遮蔽前面的 x,取之前的值并乘上 2,得到的 x 值为 12。当该作用域结束时,内部遮蔽结束并且 x 恢复成 6。当运行此程序,将输出以下内容:

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

遮蔽和将变量标记为 mut 的方式不同,因为除非我们再次使用 let 关键字,否则若是我们不小心尝试重新赋值给这个变量,我们将得到一个编译错误。通过使用 let,我们可以对一个值进行一些转换,但在这些转换完成后,变量将是不可变的。

相关推荐
程序员的那些事_1 小时前
微软用 Rust 开发了一个库操作系统 LiteBox
开发语言·后端·rust
键盘鼓手苏苏3 小时前
Flutter for OpenHarmony:cider 自动化版本管理与变更日志生成器(发布流程标准化的瑞士军刀) 深度解析与鸿蒙适配指南
运维·开发语言·flutter·华为·rust·自动化·harmonyos
IT 行者3 小时前
ZeroClaw:Rust 驱动的下一代 AI Agent 基础设施
开发语言·人工智能·rust
IT 行者3 小时前
AI Agent 平台横评:ZeroClaw vs OpenClaw vs Nanobot
开发语言·人工智能·rust
鸿乃江边鸟3 小时前
Spark Datafusion Comet 向量化Rust Native--Native算子指标如何传递到Spark UI上展示
rust·spark·native
BigNiu3 小时前
rust里mut 和遮蔽之间的区别
开发语言·rust
码农葫芦侠3 小时前
Rust学习教程1:搭建 Rust 环境
rust
键盘鼓手苏苏3 小时前
Flutter for OpenHarmony:dart_ping 网络诊断的瑞士军刀(支持 ICMP Ping) 深度解析与鸿蒙适配指南
开发语言·网络·flutter·华为·rust·harmonyos
班公湖里洗过脚3 小时前
《通过例子学Rust》第18章 错误处理
rust